スポンサード リンク
Top > PHP > PHPのお勉強メモ
スポンサード リンク

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

stdClass Edit

stdClassは基底クラスなので、何も宣言せずに使えるんだそうです。

$obj = new stdClass;
$obj->name = "php";
$obj->type = "default";

文字列のフォーマット分解 Edit

list($yy,$mm,$dd)=sscanf("2003年06月04日","%d年%d月%d日");
echo $yy; // 2003
echo $mm; // 6
echo $dd; // 4

関連ページ Edit

ページ新規作成:

コメント Edit


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

スポンサード リンク

リロード   新規 編集 凍結 差分 添付 複製 名前変更   ホーム 一覧 単語検索 最終更新 バックアップ リンク元   ヘルプ   最終更新のRSS
Last-modified: 2007-02-20 (火) 00:08:56 (4142d)