Сценарий представления Zend Framework, функции и переменный объем

Я довольно плохо знаком с 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 кажется. Я действительно искал по всей сети, и я не вижу, что кто-либо еще пытается достигнуть того, что я делаю (очень вряд ли, возможно, я ищу его неправильно).

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

Любые идеи значительно ценились бы.

1
задан NullUserException 20 December 2011 в 16:05
поделиться

2 ответа

Ваша функция 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();
2
ответ дан 2 September 2019 в 22:30
поделиться

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

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

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

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

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

0
ответ дан 2 September 2019 в 22:30
поделиться
Другие вопросы по тегам:

Похожие вопросы: