对于某些用户级调试,我想知道从哪个变量调用类的某个属性。所有课程都是stdClass
,所以我不能在那个方向寻找答案。
假设我有一个包含属性Person
和Name
的课程Sex
。设置看起来像$oPerson = new Person()
。当我致电$oPerson->FirstName = 'Jack';
时,我想弄清楚这是来自$oPerson
的电话。这可以实现吗?
答案 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
。