В PHP есть ли способ игнорировать функции, которые не определены, а не бросают фатальную ошибку, которая видна в браузере? -ie, Fatal error: Call to undefined function
Я знаю, что существует практика обертывания всех пользовательских функций в условном порядке, как показано ниже, но есть ли программный способ получить этот эффект?
if (function_exists('my_function')) { // use my_function() here; }
Нет. Неустранимая ошибка. Даже если вы должны написать свой собственный обработчик ошибок или использовать оператор подавления ошибок @
ошибки E_FATAL
все равно заставят скрипт остановить выполнение.
Единственный способ справиться с этим – использовать function_exists()
(и, возможно, is_callable()
для хорошей меры), как в приведенном выше примере.
Всегда лучше защищать оборону по потенциальной (вероятной?) Ошибке, чем просто разрешить ошибку и покончить с ней позже.
EDIT – php7 изменил это поведение, а неопределенные функции / методы – захватывающие исключения.
В php 7 это стало возможным.
Пример codez:
try { some_undefined_function_or_method(); } catch (\Error $ex) { // Error is the base class for all internal PHP error exceptions. var_dump($ex); }
демонстрация
http://php.net/manual/en/migration70.incompatible.php
Многие фатальные и восстанавливаемые фатальные ошибки были преобразованы в исключения из PHP 7. Эти исключения ошибок наследуются от класса Error, который сам реализует интерфейс Throwable (новый базовый интерфейс наследует все исключения).
То, что вы просите, кажется немного тупой, но вы можете получить аналогичный эффект, объявив все свои функции как методы класса, а затем реализуйте __call как метод этого класса для обработки любых неопределенных вызовов методов. Затем вы можете обрабатывать вызовы неопределенным методам, как вам нравится. Ознакомьтесь с документацией здесь .
Если вы хотите подавить эту ошибку при работе с объектами, используйте эту функцию:
function OM($object, $method_to_run, $param){ //Object method if(method_exists(get_class($object), $method_to_run)){ $object->$method_to_run($param); } }
С уважением
мы можем скрыть ошибки, но это приведет к регистрации журнала ошибок apache
// Установите ошибку отображения true.
ini_set('display_errors', "0");
// Сообщить обо всех ошибках, кроме уведомления
ini_set('error_reporting', E_ALL ^ E_NOTICE ^ E_STRICT);
// Мы можем использовать метод try catch
try { my_method(); } catch (\Error $ex) { // Error is the base class for all internal PHP error exceptions. var_dump($ex); }
// Проверка метода
function_exists ()