有没有办法获得类似于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')
...
谢谢。
答案 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,但不要这样做。