Обновление: Показанный здесь подход имеет существенный недостаток: новая функция не является полностью квалифицированным членом класса; $this
отсутствует в методе, когда вызывается таким образом. Это означает, что вам придется передавать объект в функцию в качестве параметра, если вы хотите работать с данными или функциями из экземпляра объекта! Кроме того, вы не сможете получить доступ к private
или protected
членам класса из этих функций.
Хороший вопрос и умная идея с использованием новых анонимных функций!
Интересно, это работает: заменить
$me->doSomething(); // Doesn't work
от call_user_func для самой функции :
call_user_func($me->doSomething); // Works!
что не работает, так это «правильный» путь:
call_user_func(array($me, "doSomething")); // Doesn't work
если вызывается таким образом, PHP требует, чтобы метод был объявлен в определении класса.
Это проблема видимости private
/ public
/ protected
?
Обновление: Нет. Невозможно вызывать функцию обычным способом даже изнутри класса, так что это не проблема видимости. Передача фактической функции в call_user_func()
- единственный способ заставить эту работу работать.