[英]Remove method by name from php class (not in runtime)
__destruct()
。 我最初的想法是編寫一個regex ,它將與所有這些功能匹配並刪除它們(盡力而為的regex,我敢肯定會出現一些不適用於regex的極端情況),但是最終,在記住了有關使用regexes的各種問題之后我不恰當地重新考慮了-更不用說事實了,提出正則表達式工作對我來說也是一個問題。
我在C中有一些背景,所以我想我可以將所有行與function __destruct()
匹配,驗證同一行上沒有{
並注釋掉定義,所以我會得到這樣的東西:
# function __destruct()
{
echo "initiating destructor function";
$this->callToSomething();
}
我以為不會執行(或者至少-不會在對象銷毀時執行,這就是為什么我需要對此進行注釋)的原因。 但是PHP不允許這種語法,我不能這樣做。 也許它允許實現相同結果的其他語法?
我並不是真的想為這個任務編寫自己的PHP解析器,但是如果那樣做,我會做的。 但是,由於PHP中已經有一個反射類,也許有一種方法可以將類加載到內存中,在運行時刪除析構函數,然后在磁盤上覆蓋類定義?
我不明白為什么您不能在這里使用正則表達式。 當然,您需要一個更高級的模式。 但是永遠不要強迫您觸摸它。
這是找到__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。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.