読者です 読者をやめる 読者になる 読者になる

PHPの参照渡ではまった件

この前PHPの参照について、はまったのでそのときのメモ。PHPって値渡しと参照渡しを自分で定義できるのである意味困った。そしてうまく記事の投稿できなくて困った。

今回書いたコード

そもそもPHP4で書くようなコードじゃなかったんけどdefine連呼するのがめんどくさかったので…シングルトーン的なConfigクラスを作成した。
まぁ以下のコードでうまくできるのだけれど例えばsetメソッドで…&を忘れてみるとうまく行かない。あとgetInstanceメソッドの先頭の&を忘れてみてもうまく動かないorz..
どちらか一方の&を忘れるとリファレンスが返られないのは規約らしいというかリファレンスを返したければ関数の前と代入時に&を使わないといけない。初めて知りましたよ…www

<?php
class Config
{
    var $foo;
    var $bar;

    function set($key, $value)
    {
         $config =& Config::getInstance();
         $config->$key = $value;
    }

    function get($key)
    {
         $config =& Config::getInstance();
         return $config->$key;
    }

    function &getInstance()
    {
        static $instance;
        if($instance == null){
             $instance = new Config();
        }
        return $instance;
    }
}

Config::set('foo','Apple');
print Config::get('foo'); // Apple
?>