我有一个类方法内的函数。
在方法中我可以参考$this
,但我不能参与该功能。它将返回此错误:
致命错误:不在时使用$ this 对象上下文 /var/www/john/app/views/users/view.ctp 在第78行
这是我的意思的一个例子:
class View
{
var $property = 5;
function container()
{
echo $this->property;
function inner()
{
echo "<br/>Hello<br/>";
echo $this->property;
}
inner();
}
}
$v = new View();
$v->container();
您可以在此处pastie
进行测试 是否有工作要做到这一点?
我知道我可以将$ this作为参数传递给你,但还有其他方法吗?使用global $this
也会出错。
如果你好奇我为什么需要这个,那是因为我的方法是MVC模型中的一个视图(或者似乎 - 我正在使用Cake),并且在视图中我需要使用一个函数,并且我需要参考$this
。
答案 0 :(得分:6)
不要在另一个函数中创建函数,试试这个:
class View {
var $property = 5;
function container() {
echo $this->property;
$this->inner();
}
function inner() {
echo "<br/>Hello<br/>";
echo $this->property;
}
}
答案 1 :(得分:1)
为什么不用参数传递它?
function inner($instance)
{
echo "<br/>Hello<br/>";
echo $instance->property;
}
inner($this);
答案 2 :(得分:1)
我还不能评论,所以我发布了这个答案。
这个问题似乎与我有关的CakePHP,我认为你过度了View。例如,请考虑从Post Views
中阅读CakePHP Blog Example总结一下:如果你在CakePHP视图中,那么你只需输出带有嵌入式PHP的HTML。 View可以访问Controller操作中set
的变量(即UserProfiles::index
)。我建议使用如下内容:
<h2>UserProfile for <?php echo $user->name; ?></h2>
<?php if( $user->isAdmin() ): ?>
<p>You're an admin</p>
<?php else: ?>
<p>You're just a user</p>
<?php endif; ?>
此外,我建议查看Elements,如果符合要求的条件,您可以有条件地加入它们。)。
答案 3 :(得分:0)
当PHP遇到函数定义时,它将函数定义到全局范围。因此,虽然您在方法中声明了您的函数,但函数的范围实际上是全局的。因此,从$this
内访问inner()
的唯一方法是将其作为参数传递。即便如此,它的行为也会与$this
略有不同,因为您不在对象的范围内。