__destruct()
。我最初的想法是编写一个正则表达式,这将匹配所有这些函数并删除它们(尽力而为正则表达式,我确信会出现正则表达式无效的极端情况),但最终,在记住了关于正确使用正则表达式的各种问题后,我重新考虑了 - 没有提到事实,提出正则表达式似乎对我来说也是一个问题。
我在C中有一些背景,所以有一秒我认为我可以将所有行与function __destruct()
匹配,验证同一行上没有{
并将定义注释掉,所以我会得到这样的东西:
# function __destruct()
{
echo "initiating destructor function";
$this->callToSomething();
}
我认为不会执行(或者至少 - 不会执行对象销毁,这就是为什么我需要对此进行评论)。但PHP不允许这种语法,我不能这样做。也许它允许一些其他语法可以达到相同的结果?
我真的不想自己为这个任务编写自己的PHP解析器,但是如果这是它将要采取的,我会这样做。但是由于PHP中已经有一个Reflection类,也许会有一种方法将类加载到内存中,在运行时删除析构函数然后覆盖磁盘上的类定义?
答案 0 :(得分:0)
我不明白为什么你不能在这里使用正则表达式。当然,你需要一个更先进的模式。 但是你永远不应该被迫接触它。
这是一个找到__destruct()
块的模式:
function\s+__destruct\s*\(\s*\)\s*({(?>[^{}\\]++|\\.|(?1))*+})
您需要做的就是加载有问题的文件,运行
$re = '/function\s+__destruct\s*\(\s*\)\s*({(?>[^{}\\\\]++|\\\\.|(?1))*+})/s';
$result = preg_replace($re, '', $str);
将文件保存回磁盘。 C'estça。