PHP中类的静态运算符的命名空间?

时间:2013-08-06 22:34:02

标签: php namespaces

文档说

  

namespace 关键字可用于显式请求当前命名空间或子命名空间中的元素。它是类的 self 运算符的命名空间。

我需要相当于 静态 ,即。如果一个类扩展了我的类,那就是它的命名空间。

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

这样做但是让我难过。

2 个答案:

答案 0 :(得分:2)

Reflection通过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();
}

答案 1 :(得分:0)

我认为没有“迟到的静态命名空间”帮助器,你确实需要破解。

e.g。

<?php

namespace ProjectFoo;

class Foo {
    public static function ns() { echo __NAMESPACE__; }
    public static function getNamespace() {
        return static::ns();
    }
}

namespace ProjectBar;
use ProjectFoo\Foo;

class Bar extends Foo {
    public static function ns() { echo __NAMESPACE__; }
}

$foo = new Foo();
$foo::getNamespace();
print "\n";

$bar = new Bar();
$bar::getNamespace();
print "\n";