对于某些用户级调试,我想知道从哪个变量调用了某个类的某个属性。所有课程都是stdClass
,所以我无法在那个方向寻找答案。
假设我有一个Person
具有属性的类Name
和Sex
. 设置看起来像$oPerson = new Person()
。当我打电话时,$oPerson->FirstName = 'Jack';
我想弄清楚电话是从$oPerson
. 这可以实现吗?
对于某些用户级调试,我想知道从哪个变量调用了某个类的某个属性。所有课程都是stdClass
,所以我无法在那个方向寻找答案。
假设我有一个Person
具有属性的类Name
和Sex
. 设置看起来像$oPerson = new Person()
。当我打电话时,$oPerson->FirstName = 'Jack';
我想弄清楚电话是从$oPerson
. 这可以实现吗?
这并不完美(请参阅此处了解我的灵感以及为什么不完美),但这是一个开始:
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()
。