从调用属性的位置获取变量

时间:2012-08-23 12:14:12

标签: php

对于某些用户级调试,我想知道从哪个变量调用类的某个属性。所有课程都是stdClass,所以我不能在那个方向寻找答案。

假设我有一个包含属性PersonName的课程Sex。设置看起来像$oPerson = new Person()。当我致电$oPerson->FirstName = 'Jack';时,我想弄清楚这是来自$oPerson的电话。这可以实现吗?

1 个答案:

答案 0 :(得分:0)

这不完美(see here for my inspiration and why it's not),但这是一个开始:

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的{​​{1}}属性不是全局的,所以它不会出现在Nerd中,也不属于$GLOBALS魔法函数的范围Persons