完全限定的接口名称


Fully qualified interface name

有没有一种方法可以获得类似于MyClass::class的完全限定接口名称?

例如:

namespace Example'Tests;
use Example'Interfaces'InputInterface;
...
class CommandTest ...
...
public function createInputMock()
{
    // I want to replace next string with something similar to MyClass::class
    $this->getMockBuilder('Example'Interfaces'InputInterface')
...

谢谢。

::class名称解析可以与任何导入的命名空间一起使用:类、接口、函数。。。

namespace A'B'C {
    interface Interface_Bar {}
    function Function_Foo() {}
    function Function_Foo_Bar() {}
    const Const_BARFOO = 123;
}
namespace {
    use A'B'C'Interface_Bar;
    use A'B'C;
    use Undefined'Classes'UndefinedClass;
    use function A'B'C'Function_Foo_Bar;
    use const A'B'C'Const_BARFOO;
    echo Interface_Bar::class, "'n"; // print A'B'C'Interface_Bar
    echo C'Function_Foo::class, "'n"; // print A'B'C'Function_Foo
    echo C'Const_BARFOO::class, "'n"; // print A'B'C'Const_BARFOO
    echo UndefinedClass::class, "'n"; // print Undefined'Classes'UndefinedClass
    echo Function_Foo_Bar::class, "'n"; // print Function_Foo_Bar <- warning
    echo Const_BARFOO::class, "'n"; // print Const_BARFOO <- warning
}

如果我说得对,您不能使用::class表示法来转换到PHP 5.5,所以您希望在5.4或更早版本的vesrion中有类似的内容。

所以简单的答案是——不,没有办法。

由于之前版本的PHP中缺少此功能,核心开发人员不得不将::class添加到PHP 5.5中。

如果是类名,你可以进行一个奇怪的肮脏破解:在新实例上使用get_class,但不要这样做。