2010-08-03 26 views
1

我對ZendFramework頗爲陌生,並試圖弄清楚這一點。在我看來腳本(index.phtml),我有這樣的一些代碼,上面寫着:Zend框架查看腳本,函數和變量範圍

<?php 

function getErrorString($element) 
{ 
echo "<pre>"; 
print_r($this); 
echo "</pre>"; 

$string = ''; 
if(!empty($this->error[$element])) 
{ 
    $string = $string.'<label class="error" for="'.$element.'" generated="true">'; 
    foreach($this->error[$element] as $error) 
    { 
    $string = $string.$error; 
    } 
    $string = $string.'</label>'; 
} 
return $string; 
} 

echo "<pre>"; 
print_r($this); 
echo "</pre>"; 
getErrorString("blah"); 
die(); 

這給了我:

Fatal error: Using $this when not in object context in index.phtml on line XX 

它,當你在一個視圖中創建一個函數在我看來, ,你失去了$這個變量。我在網上搜索過,我看不到其他人正在做我正在做的事情(極不可能,也許我錯了)。

有了開發其他應用程序的經驗,我不明白爲什麼這個函數應該放在一個單獨的幫助器中 - >尤其是因爲這是函數唯一被調用的地方。

任何想法將不勝感激。

回答

2

您的函數getErrorString()不是Zend_View對象的對象方法。 它有它自己的範圍,不能達到$這。

下面的代碼應該爲你工作在index.phtml

function getErrorString($viewObject, $element) 
{ 
echo "<pre>"; 
print_r($viewObject); 
echo "</pre>"; 

$string = ''; 
if(!empty($viewObject->error[$element])) 
{ 
    $string = $string.'<label class="error" for="'.$element.'" generated="true">'; 
    foreach($viewObject->error[$element] as $error) 
    { 
    $string = $string.$error; 
    } 
    $string = $string.'</label>'; 
} 
return $string; 
} 

echo "<pre>"; 
print_r($this); 
echo "</pre>"; 
getErrorString($this,"blah"); 
die(); 
0

最後一次使用「$this」變量可能是顯示致命錯誤的主要原因。這是非常合理的,因爲除了定義方法&屬性之外,您不能在類定義中寫入其他任何東西,

此外,如果您在視圖頁面中創建任何功能,那麼在該功能中,「$this」變量默認情況下不可訪問。因此,您必須將該「$this」變量變爲全局變量,或者需要在函數定義之外打印與「$ this」變量相關的必需部分。

echo "<pre>"; 
print_r($this); 
echo "</pre>"; 

所以,當你在函數定義寫在上面的代碼,PHP解析器是無法找到這個「$this」變量的任何對象上下文。這並不是說你失去了「$ this」這個變量,但它不會被訪問,而是失去邏輯。

希望它有幫助。

+0

感謝您的快速反應KC! 我不確定我是否明白你的意思。你說你不能在類定義中寫任何東西,但是接着說你可以定義方法嗎? 此外,我不明白爲什麼它會打印_ $(this)會起作用,但getErrorString(「blah」)不會。 乾杯! – lyf 2010-08-03 06:48:13

+0

@lyf - 由於函數定義沒有綁定在類定義中,所以在函數定義中使用「$ this」將不起作用。 – 2010-08-03 06:58:36