我不知道這是錯誤還是正常。比方說,我有一些神奇的功能類:爲什麼PHP`__invoke`在從對象屬性觸發時無法工作
class Foo {
public function __toString() {
return '`__toString` called.';
}
public function __get($key) {
return '`__get(' . $key . ')` called.';
}
public function __invoke($x = "") {
return '`__invoke(' . $x . ')` called.';
}
}
然後在這樣一個對象的屬性創建一個實例:
$object = (object) [
'foo' => 'bar',
'baz' => new Foo
];
然後對其進行測試:
echo $object->baz;
echo $object->baz->qux;
echo $object->baz('%'); // :(
這是在最後一個回聲中斷了:Call to undefined method stdClass::baz()
目前,唯一的解決方案,我可以做我S到__invoke
部分存儲在一個臨時變量,然後調用該變量作爲這樣的功能:
$x = $object->baz;
echo $x('%'); // :)
它正常工作時,我實例化一個數組屬性的類:
$array = [
'baz' => new Foo
];
echo $array['baz'];
echo $array['baz']->qux;
echo $array['baz']('%'); // :)
由這樣,我需要我的對象上這種能力的東西相關的API:
$foo = (object) ['bar' => new MyClass];
echo $foo->bar;
→應觸發__toString
echo $foo->bar->baz;
→應觸發__get
echo $foo->bar();
→應觸發__invoke
echo $foo->bar->baz();
→應觸發__call
他們都應該返回一個字符串。
這完全可以在PHP中完成嗎?謝謝。
有趣的問題,我不知道它是否是php的缺陷,就像在[文檔](http://php.net/manual/en/language.oop5.magic.php#object.invoke)中建議的其中一個貢獻調用類中的類會引發錯誤。 –
等待,實際上你不需要把它暫時放在某個地方,'echo($ object-> baz)('%')'起作用。 –
@Bagus Tesa您使用的是什麼PHP版本?我剛在第22行的I:\ server \ www \ test.php中出現錯誤:語法錯誤,意外'(',expect','或';')。 **。 –