Tag: PHP

PHPのお勉強メモ Edit

extract Edit

連想配列の値を変数として扱うことができる。

$a = array('hoge' => '1', 'foo' => '2');
extract($a);
echo $hoge; // 1を出力
echo $foo; // 2を出力

クラス名を動的に切り替えてインスタンスを生成する Edit

newするときにクラス名の部分を変数にすることができる。

class Sample {

}

$className = 'Sample';
$obj =& new $className();

プロパティ名を動的に切り替えてセットする。 Edit

プロパティ名も変数にできる。

class Sample {
  var $flag = '1';
}

$obj =& new Sample();
$propertyName = 'flag';
$obj->$propertyName = '2';
echo $obj->$propertyName; // 2が出力される。

クラスのメソッドを動的にコールする。 Edit

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の実現方法 Edit

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();

関連ページ Edit

ページ新規作成:

コメント Edit


URL B I U SIZE Black Maroon Green Olive Navy Purple Teal Gray Silver Red Lime Yellow Blue Fuchsia Aqua White

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