我的所有網站共享一個共同的首發,處理網址,文件位置等。有3種情況需要處理 - 是目錄,文件存在和文件不存在。每個應用程序對每種情況都有唯一的代碼我決定修改一下runkit,並試圖統一代碼。每個案例將由一個函數處理,可以通過runkit重新定義。PHP - runkit重新定義方法
考慮以下代碼:
class start {
function __construct() {
$this->options = array();
}
public function process() {
// some code here
$this->file_not_exists();
}
public function file_not_exists() {
$this->options['page'] = 222;
}
public function redefine($what, $code) {
runkit_method_redefine(get_class($this), $what, '', $code, RUNKIT_ACC_PUBLIC);
}
}
$start = new start();
$start->redefine('file_not_exists', '$this->options["page"] = 333;')
// page is now 333
這部分按預期工作。但是當我嘗試更改代碼時,重新定義的方法會調用用戶函數。但是,對於上帝的愛,我無法弄清楚如何將$ this傳遞給函數。
重新定義方法是這樣的:
public function redefine($what, $code) {
runkit_method_redefine(get_class($this), $what, '', 'call_user_func('.$code.'(), '.$this.');', RUNKIT_ACC_PUBLIC)
}
這是不行的,不管我什麼(call_user_func_array爲好)。我只是不知道。備案號:
public function redefine($what, $code) {
my_user_function($this);
}
是否有效。
任何幫助表示讚賞。
請注意,這只是一個實驗,我想知道如何做到這一點:)
編輯: 我得到:
Catchable fatal error: Object of class starter could not be converted to string in blablallala\rewrite_starter2.php on line 153
你是什麼意思「這不工作」?編譯錯誤?或者是什麼?你如何發現不工作的東西? – 2011-01-31 09:50:59
我更新了我的問題 – realshadow 2011-01-31 10:38:04