在開發具有超級對象的面向對象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