【发布时间】:2016-12-16 03:04:09
【问题描述】:
场景 我有一个非常大的 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] => ;
然后我可以遍历这个数组并重新组装函数调用。但我不清楚附加参数、分隔空格等是否会改变组成一个“完整”函数调用的数组项的数量。
【问题讨论】:
-
为什么不只是
include包含函数定义的文件? -
因为我在脚本中重新定义了那个函数定义。定义其他“不需要”功能的其他文件跨越数百个文件。
-
那么,让我看看我是否有这个权利。您想使用自己的
example()定义,而不是现有定义。好的。但是,如果您不包括定义该文件的文件,那有什么问题?您只需像处理任何其他函数一样执行function example(...) {...},就不会出现错误。我在这里错过了什么? -
问题不在于 example() 本身,而在于所有其他不是 example() 的函数,以及当我包含文件时 PHP 试图执行的函数,因此引发了致命错误.
-
是的,我想这是看待它的一种方式。我在想更多,'如果未定义函数,请继续执行脚本而不是抛出致命错误'。但是一些在运行时动态定义不是 example() 的其他函数的方法应该也可以工作......(这可能吗!?)
标签: php error-handling tokenize php-7