有没有一种方法可以获得类似于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,但不要这样做。