场景我有一个非常大的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文件加载为文本/字符串,然后使用tokenizer来获取这样的内容:
[1094] => Array
(
[0] => 319
[1] => example
[2] => 172
)
[1095] => (
[1096] => Array
(
[0] => 323
[1] => 'example string parameter example'
[2] => 172
)
[1097] => )
[1098] => ;
然后我可以遍历这个数组并重新组合函数调用。但是,我不清楚是否有其他参数,破坏空格等会改变构成一个完整的数组的数组项目的数量。功能调用。
答案 0 :(得分:0)
PHP7现在允许您捕获大多数错误。这应该有效:
try {
undefinedfunc('Hello World');
}
catch (Error $e) {
echo "Error caught\n";
}
echo "Reached\n";
我只是说你不想把你的调用包裹在try catch块中,但我相信这是处理这类事情的正确方法。
我认为一个很好的选择就是编写自己的调用者,如下所示:
function call_and_catch_function($name, $arguments) {
try {
return call_user_func_array($name, $arguments);
}
catch (Error $e) {
// Do something
}
}