在php7中,从依赖注入容器或服务容器中检索实例时,使用::class
而不是硬编码字符串更好吗?如果是这样,为什么?
例如,以下几行是优选的:
$diContainer->get(Namespace\SubNamespace\Class::class);
$serviceContainer->get(Namespace\SubNamespace\Class::class);
而不是以下内容:
$diContainer->get('Namespace\SubNamespace\Class');
$serviceContainer->get('Namespace\SubNamespace\Class');
我一直在使用硬编码字符串,相信代码会更快编译,因为php不需要解释::class
关键字。但是,我也看到很多使用::class
的新php7代码。
更广泛地说,每当需要完全限定的类名时,使用::class
而不是硬编码字符串通常会更好吗?
答案 0 :(得分:3)
使用::class
可以轻松地从别名转换为完全限定名称。例如:
use MyNamespace\SubNamespace\Foo\Bar\Baz;
$container->get(Baz::class);
这很方便,因此您不必重复已经缩写的完整课程名称。结果是一个字符串。可以说,如果重命名类或命名空间,它也会使代码不易出错,因为在上面的示例中,您只需更改一次名称,而不是多次。性能应该是您最关心的问题,您可能甚至无法衡量任何真实场景中的性能影响。
作为一般经验法则,我尽可能避免使用硬编码字符串,因为它们是无意义的不透明blob,PHP或任何IDE或其他工具都不能对它们进行任何类型的静态类型检查或者以任何其他方式帮助你。