这个例子来自Edward Lecky-Thompson的“Professional PHP5”一书。
function __get($propertyName) {
if(!array_key_exists($propertyName, $this->propertyTable))
throw new Exception("Błędna własność \"$propertyName\"!");
if(method_exists($this, 'get' . $propertyName)) {
return call_user_func(array($this, 'get' . $propertyName));
} else {
return $this->data[$this->propertyTable[$propertyName]];
}
}
有人可以解释 call_user_func 函数中一步一步发生的事情吗?
在php.net上我读过第一个参数是一个要调用的函数,剩下的参数作为参数传递给该函数。
在php.net上有简单的例子,我理解它们没有问题。但是我不明白为什么在上面的例子中有一个数组,为什么$ this作为数组的第一个元素?
P.S。 我在stackoverflow上发现了一个类似的问题,我理解代码应该做什么,但我不完全理解为什么写的有用。
以下是类似问题的链接: PropertyObject
答案 0 :(得分:1)
这个由两部分组成的数组是PHP的非正式惯例,它将特定对象的方法作为回调/可调用传递。有关详细信息,请参阅http://php.net/manual/en/language.types.callable.php。
array($this, 'getFoo')
仅代表 getFoo
对象的$this
方法。
答案 1 :(得分:0)
这用于class。如果$propertyName = 'Foo'
您实际上正在调用函数$this->getFoo
。
$this
始终是当前对象,所以另一种说法是你在当前对象上调用函数getFoo
。