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スタックオーバーフローで同様の質問を見つけました。コードが何をすべきかは理解していますが、書かれたものが機能する理由を完全には理解していません。

同様の質問へのリンクは次のとおりです: PropertyObject

4

2 に答える 2

1

2 つの部分からなる配列は、特定のオブジェクトのメソッドをcallback/callableとして渡すという 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 に答える