PHP 5.3 Zend - 没有看到方法是如何被调用的



我遇到了一个以前从未遇到过的问题。 在一个项目的类(我相信是基于Zend框架(中,我有一个名为fetchKey()的方法,完整的类名是

//found in file Orm.class.php
MyCompany_Core_Orm extends MyCompany_Core_Db (which extends MyCompany_Core)

在fetchKey内部,有以下行:

$value = $this->$property;

通过使用ORM SQL日志记录(logQuery=1(,我能够缩小这一行导致SQL查询发生的范围;有了它,查询就会发生,没有它,它们就不会发生。

$property是一个字符串,我已经检查过,该字符串名称没有实际属性。 实际上,$property可以是基于数据库关系的任意数量的值。 但关键问题是:老实说,我很困惑当仅引用方法时,如何发生未知的函数调用。 我是否缺少错误报告或使用__call__get的某个方面? 感谢帮助!

作为参考,如果有助于熟悉,则在下面发布该函数:

public function fetchKey($property)
{
//NOTE: I've checked and this logical block doesn't happen
if (self::getOrmProxy() && method_exists(self::getOrmProxy(), __FUNCTION__)) {
$proxyArguments = func_get_args();
return call_user_func_array(array(self::getOrmProxy(), __FUNCTION__), $proxyArguments);
}
$savedPropertyValue = null;
$propertyExists = false;
if (property_exists($this, $property)) {
$propertyExists = true;
$savedPropertyValue = $this->$property;
unset($this->$property);
}
$value = $this->$property;
if ($propertyExists === true) {
$this->$property = $savedPropertyValue;
} else {
unset($this->$property);
}
return $value;
}

函数property_exist()无法检测到使用该方法神奇可访问的属性get()但这个功能甚至可以找到私有财产。

最新更新