Я пытаюсь запустить свойство $ greeter функции экземпляра $ greeter класса Greeter. Я прочитал answers from this related post, но не смог заставить их работать (сообщение также упоминает _call, traits, stdClass, возвращая функцию из функции (что не имеет для меня смысла, почему это работает без вызова дважды), и данные решения кажутся излишними для простой вещи, которую я пытаюсь достичь). Возможно, мое дело немного другое. Я не понимаю, почему парсер испортится.Назначение класса анонимной функции для свойства: вызов назначенной функции из экземпляра завершается
class Greeter {
private $greeter;
function __construct() {
$this->greeter = function() {
echo "Hello!\n";
};
}
public function greet() {
$this->greeter();
}
}
// THIS WORKS AS EXPECTED:
$hello = function() { echo "Hi!\n"; };
$hello();
$greeter = new Greeter();
// NEITHER OF THESE WORK:
call_user_func($greeter->greet);
$greeter->greet();
$greeter['greet']();
ВЫВОД:
Hi!
<br />
<b>Warning</b>: call_user_func() expects parameter 1 to be a valid callback, no array or string given on line <b>30</b><br />
<br />
<b>Fatal error</b>: Call to undefined method Greeter::greeter() on line <b>15</b><br />
Да, я имел в виду закрытие '>>' vs. '>>', которое исправлено в C++ 11. Что касается кода, который вы опубликовали, это действительно показывает, что PHP - забавный язык. –