试图理解一本书中的php函数call_user_func

时间:2012-08-22 07:27:11

标签: php

这个例子来自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

2 个答案:

答案 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