Я полностью против него. Одной из самых больших причин является первая причина earino указанный - это живет в одном месте. Вы не можете интегрировать его в управление исходным кодом очень легко. Это почти невозможно, чтобы иметь два devs, работающие над сохраненным proc одновременно.
Моя другая основная жалоба - то, что SQL просто не очень хорош при представлении сложной логики. У Вас нет понятия объема, код имеет тенденцию вставляться копией, потому что существует меньше способности снова использовать код (в противоположность языку OO).
необходимо предоставить доступ разработчиков к базе данных для разработки там. Во многих организациях я работал в людях данных, находятся в другом мире, чем devs, с различными полномочиями, и т.д. Хранение devs из базы данных в этих случаях было бы более трудным.
__ call
обрабатывает вызовы несуществующих методов. method_exists
- это метод интроспекции, который проверяет существование метода.
Как можно определить __ call
для обработки метода? Я думаю, вам нужно вручную создать исключение в __ call
, если не обрабатывает ваш запрос, и перехватить исключение в коде, который иначе использовал бы method_exists
. BadMethodCallException
существует для этой цели.
Взгляните на is_callable ()
.
Но нет, если метод __ call ()
обрабатывает только некоторые имена, тогда вы должны нужен другой способ проверки успешности вызова.
Могу ли я предложить интерфейс с методом canCall ($ function)
или что-то в этом роде? Затем проверьте, реализует ли класс интерфейс. Если нет, просто используйте is_callable ()
.
method_exists пытается две вещи:
function foo () {}
. get_method ()
и имеет ли она вызвать его, чтобы позволить реализации класса решить. Вам понадобится последнее. Но этот get_method ()
не «расширяется» до кода скрипта php, т.е.
Я бы склонился к тому, чтобы использовать method_exists
в вашей __call
функции и throw
Exception
в случае неудачи и завернуть все в try
catch
блок вместо использования is_callable
функции.