Если вы хотите вести журнал функций для отладки, вы можете заглянуть в расширение Xdebug. Нет хорошего способа перехватывать вызовы функций во время выполнения, и любой автоматический перехват увеличит время выполнения.
Используя XDebug, вы можете вместо этого включать его по мере необходимости, а также получать множество других вещей
(Таким образом, XDebug используется с PHPUnit для модульного тестирования и анализа покрытия.)
Проблема с __call
__ call может показаться забавным решением проблемы, но есть 3 проблем с этим, а именно
Значительные накладные расходы на выполнение. вы делаете __call -> call_user_func_array, который буквально добавит не один, а два вызова функции к каждому выполнению.
Обратные трассировки становятся не поддающимися расшифровке: реальная функция, которую вы пытались вызвать, теряется в море __call и call_user_func_array, что делает чрезвычайно трудным обратное отслеживание, особенно если ваши обратные трассировки идут с включенными списками аргументов.
Глупые скрытые функции: Вы возвращаетесь к «скрытию» функций в стиле PHP4, добавляя к ним префикс _, чтобы пользователь не вызывал его напрямую или не видел его, потому что, если имя функции названо так, как оно не будет, __call не сработает, так что у вас уже есть целый класс, полный действительно ужасных имен функций, которые разработчики будут в любом случае вызывать напрямую в разных местах. (И если вы хотите избавиться от __call позже, вам придется переименовать все эти функции, чтобы не нарушать код!)
Таким образом, если вы используете php-код для реализации этого, это приведет к невероятно ужасному коду, с которым любой будущий пользователь вашей кодовой базы NOT захочет работать. Вы гораздо лучше получаете что-то (например, Xdebug), которое может быть добавлено прозрачно, когда вам это нужно, и значительно экономит ваш код.