完全限定的接口名称

时间:2015-11-27 10:39:21

标签: php

有没有办法获得类似于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')
...

谢谢。

2 个答案:

答案 0 :(得分:8)

::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
}

答案 1 :(得分:1)

如果我说得对,你不能用::class表示法移动到PHP 5.5,所以你想要在你的5.4或更早版本中使用类似的东西。

所以简短的回答是 - 不,没有办法。

以前版本的PHP中缺少此功能是核心开发人员将::class添加到PHP 5.5的原因。

如果它是一个类名,你可以制作一个奇怪的脏黑客:在新实例上使用get_class,但不要这样做。