2010-08-03 61 views
1

我对ZendFramework颇为陌生,并试图弄清楚这一点。在我看来脚本(index.phtml),我有这样的一些代码,上面写着:Zend框架查看脚本,函数和变量范围

<?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 

它,当你在一个视图中创建一个函数在我看来, ,你失去了$这个变量。我在网上搜索过,我看不到其他人正在做我正在做的事情(极不可能,也许我错了)。

有了开发其他应用程序的经验,我不明白为什么这个函数应该放在一个单独的帮助器中 - >尤其是因为这是函数唯一被调用的地方。

任何想法将不胜感激。

回答

2

您的函数getErrorString()不是Zend_View对象的对象方法。 它有它自己的范围,不能达到$这。

下面的代码应该为你工作在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(); 
0

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

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

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

所以,当你在函数定义写在上面的代码,PHP解析器是无法找到这个“$this”变量的任何对象上下文。这并不是说你失去了“$ this”这个变量,但它不会被访问,而是失去逻辑。

希望它有帮助。

+0

感谢您的快速反应KC! 我不确定我是否明白你的意思。你说你不能在类定义中写任何东西,但是接着说你可以定义方法吗? 此外,我不明白为什么它会打印_ $(this)会起作用,但getErrorString(“blah”)不会。 干杯! – lyf 2010-08-03 06:48:13

+0

@lyf - 由于函数定义没有绑定在类定义中,所以在函数定义中使用“$ this”将不起作用。 – 2010-08-03 06:58:36