Скрипт представления Zend Framework, функции и область видимости переменной - PullRequest
1 голос
/ 03 августа 2010

Я довольно новичок в ZendFramework и пытаюсь это выяснить. В моем скрипте вида (index.phtml) у меня есть этот фрагмент кода, который говорит:

<code><?php

function getErrorString($element)
{
echo "<pre>";
print_r($this);
echo "
"; $ string = ''; если (! пусто ($ this-> ошибка [$ элемент])) { $ string = $ string. ''; } вернуть $ string; } echo "
";
print_r($this);
echo "
"; getErrorString ( "ли"); умереть();

Это дает мне:

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

Мне кажется, что когда вы создаете функцию в представлении, вы теряете переменную $ this. Я действительно искал по сети, и я не вижу, чтобы кто-то еще пытался добиться того, что я делаю (очень маловероятно, может быть, я искал это неправильно).

Имея опыт разработки других приложений, я не вижу веской причины, по которой эту функцию следует помещать в отдельный помощник -> тем более, что это единственное место, где функция будет вызываться.

Любые идеи будут с благодарностью.

Ответы [ 2 ]

2 голосов
/ 03 августа 2010

Ваша функция getErrorString () не является методом объекта Zend_View-Object. У него есть своя область действия, и он не может достичь $ this.

Следующий код должен работать для вас в index.phtml

<code>function getErrorString($viewObject, $element)
{
echo "<pre>";
print_r($viewObject);
echo "
"; $ string = ''; если (! пусто ($ viewObject-> ошибка [$ элемент])) { $ string = $ string. ''; } вернуть $ string; } echo "
";
print_r($this);
echo "
"; getErrorString ($ это, "л"); умереть();
0 голосов
/ 03 августа 2010

Последнее использование переменной "$this", вероятно, является основной причиной для показа фатальной ошибки. Это вполне оправдано из-за того, что вы не можете написать что-либо еще в определении класса, , кроме определения методов и свойств для этого класса .

Также, если вы создаете какую-либо функцию на странице просмотра, то внутри этой функции переменная "$this" по умолчанию недоступна. Таким образом, вам придется сделать эту переменную "$this" глобальной, или вам нужно вывести необходимую часть, относящуюся к переменной "$ this", вне определения функции.

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

Поэтому, когда вы пишете приведенный выше код в определении функции, синтаксический анализатор PHP не может найти какой-либо контекст объекта для этой переменной "$this". Дело не в том, что вы теряете эту переменную «$ this», но она не будет доступна, но отсутствует логика.

Надеюсь, это поможет.

...