Zend Framework视图脚本,函数和变量范围

时间:2010-08-03 06:15:06

标签: 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.'<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变量。我确实在网上搜索,我看不到其他人试图实现我正在做的事情(极不可能,也许我在寻找错误)。

根据以往开发其他应用程序的经验,我看不出将此功能放在单独的帮助器中的充分理由 - &gt;特别是因为这是函数被调用的唯一地方。

非常感谢任何想法。

2 个答案:

答案 0 :(得分: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();

答案 1 :(得分:0)

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

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

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

因此,当您在函数定义中编写上述代码时,PHP Parser无法找到此“$this”变量的任何对象上下文。这并不是说你输掉了“$ this”这个变量,但它不会被访问,而是缺少逻辑。

希望它有所帮助。