обработка ошибок — PHP 7 CLI: есть ли способ пропустить неопределенные функции?

сценарий У меня очень большой php-файл, в нем много вызовов различных функций.
Этот файл обычно выполняется в «сложном» MVC, поэтому все объекты, методы, функции определены где-то выше.

Я пишу сырой PHP-скрипт, который будет выполняться из PHP CLI, который будет напрямую включать этот другой файл.

Меня не волнует ничего внутри файла, кроме вызова одной конкретной функции

example($string);

Я хочу определить example () в моем новом скрипте, чтобы сделать что-то основное, в этом случае записать в файл. например

example($string){
file_put_contents('file.txt', $string, FILE_APPEND);
}

Я не могу просто найти исходное определение example (), добавить туда свой новый код и выполнить все приложение как обычно, потому что example () вызывается повсеместно, и я действительно просто хочу нацелиться на этот конкретный файл.

Вопрос
Есть ли способ заставить PHP продолжать выполнение с неопределенными функциями? Я не хочу оборачивать все экземпляры других функций в try catch (исходный файл вообще не должен изменяться). я пытался set_exception_handler и какой-то другой способ изменить обработку исключений в .ini, и хотя я могу настроить это, PHP все еще останавливает выполнение сценария при создании пользовательского исключения.

В настоящее время я создаю фиктивные функции в моем скрипте CLI

 function already_defined_function(){
return null;
}

Так как это генерирует только предупреждения. Это утомительно и быстро ломается, когда я пытаюсь нацелиться на большое количество файлов.

Мне любопытно, существует ли абстрактный способ подавления каких-либо неопределенных методов / функций / экземпляров классов. В настоящее время я верю, что это невозможно.

Я попытался загрузить файл PHP в виде текста / строки, а затем с помощью токенизатора получить что-то вроде этого:

[1094] => Array
(
[0] => 319
[1] => example
[2] => 172
)

[1095] => (
[1096] => Array
(
[0] => 323
[1] => 'example string parameter example'
[2] => 172
)

[1097] => )
[1098] => ;

Затем я мог бы перебрать этот массив и заново собрать вызов функции. Но мне не ясно, будут ли такие вещи, как дополнительные аргументы, пробелы и т. Д., Изменять количество элементов массива, составляющих один «полный» вызов функции.

1

Решение

PHP7 теперь позволяет ловить большинство ошибок. Это должно работать:

try {
undefinedfunc('Hello World');
}
catch (Error $e) {
echo "Error caught\n";
}
echo "Reached\n";

Я просто говорю, что вы не хотите упаковывать свои вызовы в блоки try try, но я верю, что это будет правильным способом обработки чего-то подобного.

Я думаю, что хорошей альтернативой для этого будет написание вашего собственного абонента, например так:

function call_and_catch_function($name, $arguments) {
try {
return call_user_func_array($name, $arguments);
}
catch (Error $e) {
// Do something
}
}
0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]