昨天我完成了課程的建設,其中我使用了__call
方法(前幾天介紹過)。但它運行正確,直到我使用__call
方法。如何解決它? - 變量包含的內容應該是
其所有代碼是
public function __call($Function, array $Parameters)
{
if(method_exists($this, $Function))
{
call_user_func_array(array($this, $Name), $Parameters);
}
else
{
try
{
if(!preg_match('/[A-Za-z]_Style|Attribute/i', $Function))
{
throw new MarC_Exception(...);
}
}
catch(MarC_Exception $Exception)
{
$Exception -> ExceptionWarning(...);
}
$Function = explode('_', $Function);
$Function[0] = strtolower($Function[0]);
...
$Options = array('Style', 'Attribute');
if($Function[1] == $Options[0])
{
if(strtolower($Function[0]) == $this -> Elements['top'])
{
array_unshift($Parameters, $Function[0]);
call_user_func_array(array($this, 'Set_AllElementStyles'), $Parameters);
}
else
{
if($this -> Check_StyleName($Parameters[0]))
{
array_unshift($Parameters, $Function[0]);
call_user_func_array(array($this, 'Set_AllElementStyles'), $Parameters);
}
}
}
else
{
if(strtolower($Function[0]) == $this -> Elements['top'])
{
array_unshift($Parameters, $Function[0]);
call_user_func_array(array($this, 'Set_AllElementAttributes'), $Parameters);
}
else
{
if($this -> Check_AttributeName($Parameters[0]))
{
array_unshift($Parameters, $Function[0]);
call_user_func_array(array($this, 'Set_AllElementAttributes'), $Parameters);
}
}
}
}
}
,但問題是,(此時)在preg_match
使用。在那裏他看到(我不知道爲什麼)變量函數的內容是Set_AllElementStyles(我在call_user_func_array下面調用)代替(例如)Body_Style。
如果地方爲代碼echo $Function
,看看到底發生了什麼,它會調用
Body_style
如果是在功能代碼開頭或內如果分支的if-else語句Body_Style
和Set_AllElementStyles
如果在if-else的其他分支中
我在哪裏發生了導致此問題的錯誤?(?如何解決此問題)
編輯1:類RootAssembler_Html的對象的 實施例(即抽象類UniqueAssembler的最終覆蓋),具有__call
用法在一起。
$VMaX = new MarC\RootAssembler_Html();
$VMaX -> Set_ExportWay();
$VMaX -> Set_Content();
$VMaX -> Set_Content($Text);
$VMaX -> Body_Style('background-color', '#ABCDEF');
$VMaX -> Body_Attribute('id', 'test');
$VMaX -> Execute();
輸出:
<html>
<head>
/* some text that is not set in the first usage of method Set_Content */
</head>
<body id='test' style="background-color: #ABCDEF;">
/* some text that was set in the second usage of method Set_Content */
</body>
</html>
我認爲你應該提供一些較短的工作代碼,這樣我們就可以更容易地看到問題所在 - 並且你會告訴我們你嘗試了一些調試......順便說一句。你知道你的正則表達式/ [a-z] \ _ Style | Attribute/i匹配:單詞「屬性」還是一個字母后跟'_'和「樣式」? –
@JanLegner:問題不在於正則表達式本身(即使它可能錯誤)。問題是'Set_AllElementStyles'不應該出現在那裏。 –
@Václav如何調用具有參數的'__call'以及實際輸出和期望輸出的示例? – divaka