Как использовать is_callable с __call?

Я использую 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 это проверяет наличие примесей , но я думаю, что это довольно дорого.

10
задан Rudie 9 May 2011 в 17:23
поделиться