スーパーオブジェクトを持つオブジェクト指向の HMVC を開発する際、アプリケーション プロセスのある時点で名前空間を使用する必要がありました。ここで、名前空間は、同じ方法でアクセスできるさまざまなコードを「バージョン管理」する方法として機能します。以下の縮小された例でFoo
はqux
、バージョンA
またはB
. 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