【问题标题】:Is it better to use ::class rather than hardcoded string?使用 ::class 而不是硬编码字符串更好吗?
【发布时间】:2017-05-09 00:03:20
【问题描述】:

在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 而不是硬编码字符串通常更好吗?

【问题讨论】:

    标签: php class containers keyword


    【解决方案1】:

    使用::class 可以让您轻松地从别名转换为完全限定名称。例如:

    use MyNamespace\SubNamespace\Foo\Bar\Baz;
    
    $container->get(Baz::class);
    

    这是一种方便,因此您不必重复已缩写的名称的完整类名。结果是一个字符串。可以说,如果您重命名类或命名空间,它还可以减少代码出错的可能性,因为在上面的示例中,您只需更改名称一次,而不是多次。性能应该是您最不关心的问题,您甚至可能无法衡量任何实际场景中的性能影响。

    作为一般经验法则,我会尽可能避免硬编码字符串,因为它们是无意义的不透明 blob,PHP 或任何 IDE 或其他工具都不能对它们进行任何类型的静态类型检查或帮助你以任何其他方式。

    【讨论】:

    • 谢谢。我特别喜欢“毫无意义的不透明斑点”推理。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-06-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多