Я использую PHP 5.3, который вводит замыкания. Поскольку теперь в моем приложении (и фреймворке) доступны замыкания, я использую is_callable, чтобы узнать, что это за обработчик $ callback
.
Если $ callback
is_callable
, Я знаю достаточно и использую эту функцию / метод / закрытие. Если он не вызывается и является строкой, вероятно, это имя метода в классе $ this
. Он может существовать, а может и нет. Если я допущу его до PHP, он «выдаст» приятную фатальную ошибку (мне это нравится).
Но я хочу использовать микшеры , что означает, что мне нужен волшебный метод __call
. __ call
очень круто, потому что он (может) содержать (и) логику перед фактическим вызовом функции. НО ... что произойдет, если после __ call
вызываемый метод не существует? Конечно, я могу вызвать исключение, но мы не узнаем этого раньше.
Проблема теперь в полезности is_callable
, потому что после реализации __ call
, все вернет истину, потому что все имеет запасной вариант (являющийся __ call
).
Есть ли способ иметь и динамические методы, и полезные is_callable
?
Я бы хотел увидеть какой-то кешируемый магический метод __ is_callable
, с которым PHP будет «обращаться», когда вызывается is_callable (array ($ object, $ method))
.
На php.net я не могу найти никого, кто был бы так обеспокоен этим, как я. Этого не может быть! Если вы используете __ call
, вы больше не можете использовать is_callable
!?
Я что-то понимаю?
PS. Я изучал method_exists
, но это ' s просто недостаточно хорош (даже если я могу отфильтровать все замыкания и глобальные функции), потому что он вернет true для частных и защищенных методов, а также для общедоступных.
edit
Я сделал «лучше» is_callable это проверяет наличие примесей , но я думаю, что это довольно дорого.