PHP __ звонят по сравнению с method_exists

Я полностью против него. Одной из самых больших причин является первая причина earino указанный - это живет в одном месте. Вы не можете интегрировать его в управление исходным кодом очень легко. Это почти невозможно, чтобы иметь два devs, работающие над сохраненным proc одновременно.

Моя другая основная жалоба - то, что SQL просто не очень хорош при представлении сложной логики. У Вас нет понятия объема, код имеет тенденцию вставляться копией, потому что существует меньше способности снова использовать код (в противоположность языку OO).

необходимо предоставить доступ разработчиков к базе данных для разработки там. Во многих организациях я работал в людях данных, находятся в другом мире, чем devs, с различными полномочиями, и т.д. Хранение devs из базы данных в этих случаях было бы более трудным.

14
задан neo 1 October 2009 в 18:37
поделиться

4 ответа

__ call обрабатывает вызовы несуществующих методов. method_exists - это метод интроспекции, который проверяет существование метода.

Как можно определить __ call для обработки метода? Я думаю, вам нужно вручную создать исключение в __ call , если не обрабатывает ваш запрос, и перехватить исключение в коде, который иначе использовал бы method_exists . BadMethodCallException существует для этой цели.

8
ответ дан 1 December 2019 в 13:09
поделиться

Взгляните на is_callable () .

Но нет, если метод __ call () обрабатывает только некоторые имена, тогда вы должны нужен другой способ проверки успешности вызова.

Могу ли я предложить интерфейс с методом canCall ($ function) или что-то в этом роде? Затем проверьте, реализует ли класс интерфейс. Если нет, просто используйте is_callable () .

5
ответ дан 1 December 2019 в 13:09
поделиться

method_exists пытается две вещи:

  • Ищет имя метода в таблице функций класса. Это методы типа function foo () {} .
  • Проверяет, имеет ли класс (код C) функцию (код C) get_method () и имеет ли она вызвать его, чтобы позволить реализации класса решить.

Вам понадобится последнее. Но этот get_method () не «расширяется» до кода скрипта php, т.е.

4
ответ дан 1 December 2019 в 13:09
поделиться

Я бы склонился к тому, чтобы использовать method_exists в вашей __call функции и throw Exception в случае неудачи и завернуть все в try catch блок вместо использования is_callable функции.

1
ответ дан 1 December 2019 в 13:09
поделиться
Другие вопросы по тегам:

Похожие вопросы: