2014-03-06 61 views
1

erm ...我有一個類,試圖做一個模板類,使用preg_replace_callback,但我不知道參數2如何寫

class template { 
    public function parse_template($newtpl, $cachetpl){ 
     ...... 
     $template = preg_replace("/\<\!\-\-\{(.+?)\}\-\-\>/s", "{\\1}", $template); 
     $template = preg_replace_callback("/\{lang\s+(.+?)\}/is", $this->languagevar('\\1'), $template); 
     ...... 
    } 

    public function languagevar($param1){ 
     ...... 
     return $lang[$param1]; 
     ...... 
    } 
} 

這是如何工作的?在我的html(模板)文件中,有這樣的{lang hello},並且parse_template找到了{lang}它會使用$ this-> languagevar('hello')進行轉換的{lang}。

,但我一直在

$template = preg_replace_callback("/\{lang\s+(.+?)\}/is", $this->languagevar('\\1'), $template); 

得到錯誤的錯誤消息是

preg_replace_callback():要求參數2, '(' \ 1 ')',是一個有效的 回調

之前,我可以做到用

回調

但也許目前的PHP版本問題,遇到錯誤說/ E已被棄用,使用preg_replace_callback代替

回答

0

您需要提供一個有效的callback作爲第二個參數來preg_replace_callback。 在你的情況下,將是array($this, 'languagevar')

另請注意,您無法顯式地將捕獲的組傳遞給您想要執行的回調方法。該方法將收到一個所有匹配元素的數組。

+0

我如何解析參數成languagevar('parameter'),參數從preg_replace(。+?) – user259752

+0

@ user3040842獲取請閱讀'preg_replace_callback'手冊。你不能選擇你的回調會收到什麼樣的論據;它將傳遞一個*數組匹配模式*的數組。 – lafor

1

用途:

$template = preg_replace_callback("/\{lang\s+(.+?)\}/is", array($this, 'languagevar'), $template); 

,並傳遞給回調函數的參數是匹配的元素的數組,所以你必須改變languagevar以下:

public function languagevar($matches){ 
     /// ...... 
     return $lang[$matches[1]]; 
    } 
+0

erm ...昨天我試了這個工作,但實際上我有很多使用preg_replace('模式/ ies','$ this-> callingmethod('\\ 1')',$ template)的類方法以前用同樣的方式調用,唯一的辦法就是將所有的方法parameter1設置爲$ parameter [1]? 任何更好的方法來避免再次編輯所有的方法?除了降級PHP版本? – user259752

相關問題