• 追加された行はこの色です。
  • 削除された行はこの色です。
RIGHT:&tag(PHP);
#contentsx

* PHPのお勉強メモ [#vdd56417]

** extract [#hc5c56ca]
連想配列の値を変数として扱うことができる。
 $a = array('hoge' => '1', 'foo' => '2');
 extract($a);
 echo $hoge; // 1を出力
 echo $foo; // 2を出力
** クラス名を動的に切り替えてインスタンスを生成する [#pf0cf05f]
newするときにクラス名の部分を変数にすることができる。
 class Sample {
 
 }
 
 $className = 'Sample';
 $obj =& new $className();

** プロパティ名を動的に切り替えてセットする。 [#x3cd447e]
プロパティ名も変数にできる。
 class Sample {
   var $flag = '1';
 }
 
 $obj =& new Sample();
 $propertyName = 'flag';
 $obj->$propertyName = '2';
 echo $obj->$propertyName; // 2が出力される。

** クラスのメソッドを動的にコールする。 [#y9ce201b]
 class Sample {
   function callfunc($method, $messages) {
     call_user_func_array(array(&$this, $method), $messages);
   }
 
   function hello($msg) {
     echo $msg;
   }
 }
 
 $obj =& new Sample();
 $obj->callfunc('hello', 'world');
 // callfunc()メソッドを経由して、hello()メソッドに'world'を引数として呼び出される。

** Singletonの実現方法 [#n59ff4b9]
getInstanceメソッドでインスタンスを取得するようにし、static変数でオブジェクトを返す。
 class ClassRegistry{
 
   var $_objects = array();
 
   function &getInstance() {
     static $instance = array();
     if (!$instance) {
       $instance[0] = &new ClassRegistry;
     }
      return $instance[0];
   }
   
   function addObject($key, &$object) {
     $_this =& ClassRegistry::getInstance();
     $key = strtolower($key);
     if (array_key_exists($key, $_this->_objects) === false) {
       $_this->_objects[$key] = &$object;
     }
   }
 
   function removeObject($key) {
     $_this =& ClassRegistry::getInstance();
     $key = strtolower($key);
     if (array_key_exists($key, $_this->_objects) === true) {
       unset($_this->_objects[$key]);
     }
   }
   
   function isKeySet($key) {
     $_this =& ClassRegistry::getInstance();
     $key = strtolower($key);
     return array_key_exists($key, $_this->_objects);
   }
   
   function &getObject($key) {
     $_this =& ClassRegistry::getInstance();
     $key = strtolower($key);
     return $_this->_objects[$key];
   }
 }
 
 Class Person1 {
   var $name = 'person1';
 }
 Class Person2 {
   var $name = 'person2';
 }
 Class PersonList {
   function show() {
     // Singleton なので、どこでも呼び出して値を取り出せます。
     $person1 = ClassRegistry::getObject('person1');
     $person2 = ClassRegistry::getObject('person2');
     echo $person1->name;
     echo $person2->name;
   }
 }
 
 $person1 =& new Person1();
 $person2 =& new Person2();
 // Singleton でオブジェクトを記憶させておく
 ClassRegistry::addObject('person1', $person1);
 ClassRegistry::addObject('person2', $person2);
 
 $personList =& new PersonList();
 $personList->show();

** stdClass [#td70e6e1]
stdClassは基底クラスなので、何も宣言せずに使えるんだそうです。
 $obj = new stdClass;
 $obj->name = "php";
 $obj->type = "default";

** 文字列のフォーマット分解 [#b0de10a3]
 list($yy,$mm,$dd)=sscanf("2003年06月04日","%d年%d月%d日");
 echo $yy; // 2003
 echo $mm; // 6
 echo $dd; // 4

** 関連ページ [#t1af7490]
#lsx

#newpage_subdir()

** コメント [#jaf64d40]
#comment


    ホーム 一覧 単語検索 最終更新 バックアップ リンク元   ヘルプ   最終更新のRSS