Php Zend框架视图脚本、函数和变量范围

Php Zend框架视图脚本、函数和变量范围,php,zend-framework,fatal-error,Php,Zend Framework,Fatal Error,我对ZendFramework还比较陌生,我正试图弄明白这一点。在我的视图脚本(index.phtml)中,我有这样一段代码: <?php function getErrorString($element) { echo "<pre>"; print_r($this); echo "</pre>"; $string = ''; if(!empty($this->error[$element])) { $string = $string.'<

我对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();
在我看来,在视图中创建函数时,会丢失$this变量。我确实在网上搜索过,但我看不到其他人试图实现我正在做的事情(可能性很小,也许我搜索错了)

根据以往开发其他应用程序的经验,我看不出有什么理由将此函数放在单独的帮助程序->中,特别是因为这是调用此函数的唯一位置

任何想法都将不胜感激。

最后一次使用“
$this
”变量可能是显示致命错误的主要原因。这是非常合理的,因为除了定义与该类相关的方法和属性之外,您不能在类定义中编写任何其他内容

此外,如果要在视图页面中创建任何函数,则默认情况下无法访问该函数中的“
$this
”变量。因此,您必须使“
$this
”变量变为全局变量,或者您需要在函数定义之外打印与“$this”变量相关的所需部分

echo”“;
打印(本);
回声“;
因此,在函数定义中编写上述代码时,PHP解析器无法找到此“
$this
”变量的任何对象上下文。这并不是说您丢失了“$this”变量,而是因为缺少逻辑,所以无法访问它


希望有帮助。

您的函数getErrorString()不是Zend_View-Object的objectmethod。 它有自己的范围,无法达到$this

下面的代码应该适用于index.phtml

函数getErrorString($viewObject,$element) { 回声“; 打印($viewObject); 回声“; $string=''; 如果(!empty($viewObject->error[$element])) { $string=$string''; foreach($viewObject->error[$element]作为$error) { $string=$string.$error; } $string=$string''; } 返回$string; } 回声“; 打印(本); 回声“; getErrorString($this,“blah”); 模具();
感谢KC的快速响应!我不确定我是否理解你的意思。您说您不能在类定义中编写任何其他内容,但又说您可以定义方法?另外,我不明白为什么它会打印$(这个)会工作,但是getErrorString(“blah”)不会。干杯@lyf-由于函数定义未绑定在类定义中,因此在函数定义中使用“$this”将不起作用。
 Fatal error: Using $this when not in object context in index.phtml on line XX
echo "<pre>";
print_r($this);
echo "</pre>";
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();