1

ドキュメントによると

namespaceキーワードを使用して、現在の名前空間またはサブ名前空間から要素を明示的に要求できます。これは、クラスのself演算子に相当する名前空間です。

代わりにstaticに相当するものが必要です。クラスが私のクラスを拡張する場合、その名前空間。

これ

 return preg_replace('/.[^\\\\]+$/', '', get_class($object));

それはしますが、それは私を悲しくさせます。

4

2 に答える 2

3

リフレクションは、 を介してこれを行う効果的な方法を提供しReflectionObject->getNamespace()ます。次のコードを確認してください。

namespace Foo {
    class Bar {
        public function getNamespace() {
            return (new \ReflectionObject($this))->getNamespaceName();
        }
    }
}

namespace Baz {
    use Foo\Bar as BaseClass;

    class Bar extends BaseClass {}
}

namespace {
    $bar1 = new Foo\Bar();
    echo "ns1 is: ", $bar1->getNamespace(), '<br>';

    $bar2 = new Baz\Bar();
    echo "ns2 is: ", $bar2->getNamespace();
}
于 2014-12-30T07:20:50.310 に答える