0

私はこの電子ブック、Beginning PHP5 and Mysql: From Novice to Professional を読んでいます。OOP セクションでは、このサンプル コードを試して、コンピューターと本で同じ結果を再現しています。

class Staff
{
var $name;
var $city;
protected $wage;
    function __get($propName)
    {
        echo "__get called!<br />";
        $vars = array("name","city");
        if (in_array($propName, $vars))
        {
        return $this->$propName;
        } else {
        return "No such variable!";
        }
    }
}
$employee = new Staff();
$employee->name = "Mario";
echo $employee->name."<br />";
echo $employee->age;

本では - 結果は次のように示されています。

Mario
__get called!
No such variable!

しかし、私のコンピューターでは:

Mario

最初の行のみ。他の 2 行は「無視」されました。何故ですか?!?!

これを機能させるために変更する必要がある php.ini の構成設定はありますか? 誰かが説明するのを手伝ってもらえますか?

4

2 に答える 2

1

__get()非パブリックまたは存在しないプロパティに対してのみ呼び出されます。現在、 というプロパティがあるnameため、魔法のメソッドは呼び出されません。に変更var $nameするprivate $nameと動作します。

于 2012-04-13T15:03:13.553 に答える
0

OK私は答えを見つけたと思います。PHPドキュメントによると

すべてのオーバーロード メソッドは public として定義する必要があります。

だから魔法のメソッドを公開する

public function __get() {}
于 2012-04-13T14:57:13.333 に答える