2010-08-03 2 views
1

Я довольно новичок в ZendFramework и пытаюсь понять это. На мой взгляд, сценарий (index.phtml), у меня есть кусок кода, который говорит:Скриншот, функции и область видимости Zend Framework

<?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-Object. У этого есть своя область и не мог достигнуть этого $.

Следующий код должен работать для вас в 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! Я не уверен, понимаю ли вы, что вы имеете в виду. Вы сказали, что не можете написать что-нибудь еще в определении класса, но потом сказали, что вам разрешено определять методы? Кроме того, я не понимаю, почему он будет печатать _ $ (это) будет работать, но getErrorString ("blah") не будет. Приветствия! – lyf

+0

@lyf - Поскольку определение вашей функции не привязано к определению класса, поэтому использование «$ this» в определении функции не будет работать. –

Смежные вопросы