Php Zend框架视图脚本、函数和变量范围
我对ZendFramework还比较陌生,我正试图弄明白这一点。在我的视图脚本(index.phtml)中,我有这样一段代码: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.'<
<?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();