|
スポンサード リンク
スポンサード リンク
Tag: PHP
PHPのお勉強メモ
extract
連想配列の値を変数として扱うことができる。 $a = array('hoge' => '1', 'foo' => '2'); extract($a); echo $hoge; // 1を出力 echo $foo; // 2を出力 クラス名を動的に切り替えてインスタンスを生成する
newするときにクラス名の部分を変数にすることができる。 class Sample { } $className = 'Sample'; $obj =& new $className(); プロパティ名を動的に切り替えてセットする。
プロパティ名も変数にできる。 class Sample { var $flag = '1'; } $obj =& new Sample(); $propertyName = 'flag'; $obj->$propertyName = '2'; echo $obj->$propertyName; // 2が出力される。 クラスのメソッドを動的にコールする。
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の実現方法
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
stdClassは基底クラスなので、何も宣言せずに使えるんだそうです。 $obj = new stdClass; $obj->name = "php"; $obj->type = "default"; 文字列のフォーマット分解
list($yy,$mm,$dd)=sscanf("2003年06月04日","%d年%d月%d日"); echo $yy; // 2003 echo $mm; // 6 echo $dd; // 4 関連ページ
コメント
スポンサード リンク |