1

一部のユーザーレベルのデバッグでは、クラスの特定のプロパティがどの変数から呼び出されたかを知りたいと思います。すべてのクラスはstdClassであるため、その方向の答えを探すことはできません。

PersonプロパティNameとを持つクラスがあるとしましょうSex。セットアップは次のようになり$oPerson = new Person()ます。私が電話するとき$oPerson->FirstName = 'Jack';、電話がから行われたことを理解したいと思います$oPerson。これは達成できますか?

4

1 に答える 1

0

これは完璧ではありません (私のインスピレーションとそうでない理由については、こちらを参照してください)。

class Person {
    var $name;
    var $sex;

    function Person() {
        $this->name = "Jon";
        $this->sex = "male";
    }

    function __get($name) {
        $var_name = "";
        foreach ($GLOBALS as $key => $val) {
            if ($val === $this) {
                $var_name = $key;
                break;
            }
        }

        echo "Getting undefined '$name' from '\$$var_name'.\n";

        $trace = debug_backtrace();
        trigger_error(
            'Undefined property via __get(): ' . $name .
            ' in ' . $trace[0]['file'] .
            ' on line ' . $trace[0]['line'],
            E_USER_NOTICE);

        return null;
    }
}

$oPerson = new Person();
$name = $oPerson->name;
$fullname = $oPerson->fullname;

たとえば、次の場合は機能しません。

class Nerd {
    var $person;

    function Nerd() {
        $person = new Person();
        $nerd_fullname = $person->fullname;
    }
}

$personプロパティNerdはグローバルではないため、 には表示されず、のマジック関数の$GLOBALS範囲内にもありません。Persons__get()

于 2012-08-23T13:43:02.697 に答える