在开发具有超级对象的面向对象HMVC的同时,在应用程序进程期间的某个时刻,它需要使用名称空间。在这里,名称空间将作为“版本控制”不同代码的方法,可以以相同的方式访问。在下面的缩小示例中,如果我的版本号为A
或B
,则可以使用方法qux
执行类Foo
。我知道如果我使用self::
而不是$this
,问题就会消失,但是我希望避免这种情况。目前,我得到了下面的PHP错误:跨命名空间对象方向?
Fatal error: Using $this when not in object context
所以我的问题是,我怎么能在这个特殊的环境中使用$this
?
namespace
{
$gamma = new \Gamma();
$gamma->execute('A', 'Foo', 'qux');
// ...
class Alpha
{
// ...
}
class Beta extends Alpha
{
public function foo($input)
{
echo $this->bar($input);
}
public function bar($input)
{
return $input;
}
}
class Gamma extends Beta
{
public function execute($space, $class, $method)
{
call_user_func_array(array($space . '\\' . $class, $method), array());
}
}
}
namespace A
{
class Foo extends \Gamma
{
public function qux()
{
$this->foo('I like turtles');
}
}
}
namespace B
{
class Foo extends \Gamma
{
public function qux()
{
$this->foo('I like strawberries');
}
}
}
的预期结果是:
"I like turtles"
任何意见,解答,指导我们非常感激。 :3
这是没有意义的。你不能在静态上下文中使用'$ this'。如果没有明确定义方法,则不应该使用静态方法。而且你不应该在构造函数中“做工”。 – 2013-02-22 16:13:49
@tereško我在问它如何是一个静态的上下文,如何避免它是一个静态的上下文,它只是一个例子。 – escproxy 2013-02-22 16:15:47
你真的不应该在扩展类上调用函数;父母不应该知道。 – 2013-02-22 16:16:23