0

该示例来自 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 作为数组的第一个元素?

PS我在stackoverflow上发现了一个类似的问题,我理解代码应该做什么,但我不完全理解为什么写的东西有效。

这是类似问题的链接: PropertyObject

4

2 回答 2

1

两部分数组是 PHP 的非正式正式约定,将特定对象的方法作为回调/可调用对象传递。有关详细信息,请参阅http://php.net/manual/en/language.types.callable.php

array($this, 'getFoo')简单地代表对象getFoo方法$this

于 2012-08-22T07:31:55.630 回答
0

这是在一个中使用的。如果$propertyName = 'Foo'您有效地调用该函数$this->getFoo

$this始终是当前对象,因此另一种说法是您正在调用getFoo当前对象上的函数。

于 2012-08-22T07:32:16.330 回答