PHPのリファレンス

PHPのリファレンスを触ったのでメモ書き。

PHP において、リファレンスとは同じ変数の内容を異なった名前で コールすることを意味します。これは C のポインタとは異なります。 リファレンスを使ってポインタの演算をすることはできませんし、 リファレンスは実メモリのアドレスでもありません。詳細は リファレンスが行わないこと を参照ください。 そうではなく、リファレンスはシンボルテーブルのエイリアスです。 PHP では、変数名と変数の内容は異なっており、 このため、同じ内容は異なった複数の名前を有する事が可能であることに 注意してください。最も良く似ているのは、Unix のファイル名とファイルの 関係です。この場合、変数名はディレクトリエントリ、変数の内容は ファイル自体に対応します。リファレンスは、Unix ファイルシステムの ハードリンクのようなものであると考えられます。

My_DB.php

class My_DB {
  public function &getInstance() {
    static $dbh = null;
    if (is_null($dbh)) {
      $host = '*****';
      $dbname = '*****';
      $user = '*****';
      $pass = '*****';
 
      $dbh = new PDO("mysql:host=$host;dbname=$dbname", $user, $pass);
 
      return $dbh;
    }
  }
  public function find_data_by_id($table, $id) {
    $dbh =& My_DB::getInstance();
    $sql = sprintf('SELECT * FROM %s WHERE id = ?', $table);
    $sth = $dbh->prepare($sql);
    $sth->execute(array($id));
    $ret = $sth->fetch(PDO::FETCH_ASSOC);
    $dbh = null;
 
    return $ret;
  }
}
main.php

require_once('My_DB.php');
$data = My_DB::find_data_by_id('users', 1);
print_r($data);
結果

php main.php
Array
(
  [id] => 1
  [name] => hoge
  [hide] => 0
  [created] => 2009-12-02 22:46:01
  [updated] => 2009-12-02 22:46:01
)

main.phpを見ると、My_DBクラスのfind_data_by_idメソッドをstaticメソッドのように使えてる。
find_data_by_idはstaticメソッドではないよ!
この書き方好きだな♪
メインでインスタンスをつくる(newする)必要がないのもいいね。

参考

http://www.php.net/manual/ja/language.references.php
http://www.php.net/manual/ja/book.pdo.php