方案我有一个非常大的php文件,它具有对不同功能的大量调用。
该文件通常在“复杂的” MVC中执行,因此所有对象,方法和功能的定义都在其他位置更高。
我正在编写要从PHP CLI执行的原始PHP脚本,该脚本将直接包含此其他文件。
除了调用一个特定函数外,我不在乎文件中的任何内容
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] => ;
然后,我可以遍历此数组并重新组装函数调用。但是我不清楚是否其他参数,空格等会改变组成一个“完成”函数调用的数组项的数量。
最佳答案
PHP7现在允许您捕获大多数错误。这应该工作:
try {
undefinedfunc('Hello World');
}
catch (Error $e) {
echo "Error caught\n";
}
echo "Reached\n";
我只是说您不想将 call 包装在try catch块中,但是我相信这是处理此类问题的正确方法。
我认为对此的一个很好的选择是编写您自己的 call 者,如下所示:
function call_and_catch_function($name, $arguments) {
try {
return call_user_func_array($name, $arguments);
}
catch (Error $e) {
// Do something
}
}
关于php - PHP 7 CLI : is there any method to skip undefined functions?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41176642/