php - PHP 7 CLI : is there any method to skip undefined functions?

标签 php error-handling tokenize php-7

方案我有一个非常大的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/

相关文章:

Javascript/Php - 当直接在 URL 中键入操作表单页面时重定向

php - PHP 7.0.11 中的 BUG,FILTER_FLAG_NO_RES_RANGE

python - Python : how to print detailed error messages about errors?

php - PHP变量规则

java - 如何在 Play Framework 2.4 (Java) 上创建自定义 "Action Not Found"页面

Python 3 : tokenize library changes

php - 防止同一 php 脚本出现多个实例

java - 仅使用 String 方法拆分具有多个定界符的字符串

java - java API中的-sentenceDelimiter换行符

php - zip 图片上传