<div class="section">
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