我是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;特别是因为这是函数被调用的唯一地方。
非常感谢任何想法。
答案 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”这个变量,但它不会被访问,而是缺少逻辑。
希望它有所帮助。