Я довольно плохо знаком с ZendFramework и пытаюсь понять это. По моему мнению, сценарий (index.phtml), у меня есть этот бит кода, в котором говорится:
<?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
Мне при создании функции в рамках представления потерей переменной $this кажется. Я действительно искал по всей сети, и я не вижу, что кто-либо еще пытается достигнуть того, что я делаю (очень вряд ли, возможно, я ищу его неправильно).
С прошлым опытом, разрабатывающим другие приложения, я не вижу серьезного основания, почему эта функция должна быть помещена в отдельного помощника-> тем более, что это - единственное место, функция будет когда-либо вызываться.
Любые идеи значительно ценились бы.
Ваша функция getErrorString() не является объектным методом Zend_View-Object. Она имеет свою собственную область видимости и не может достичь $this.
Следующий код должен работать в 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();
Последнее использование переменной « $ this
», вероятно, является основной причиной отображения фатальной ошибки. Это вполне оправдано из-за того, что вы не можете написать что-либо еще в определении класса , кроме определения методов и свойств по отношению к этому классу .
Также, если вы создаете какую-либо функцию на странице просмотра, то внутри этой функции переменная « $ this
» по умолчанию недоступна. Таким образом, вам придется сделать эту переменную « $ this
» глобальной, или вам нужно будет вывести необходимую часть, относящуюся к переменной «$ this», за пределами определения функции.
echo "<pre>";
print_r($this);
echo "</pre>";
Итак, когда вы пишете приведенный выше код в определении функции, PHP Parser не может найти какой-либо объектный контекст для этой переменной " $ this
". Дело не в том, что вы теряете эту переменную "$ this", но она будет недоступна, а для недостающей логики.
Надеюсь, это поможет.