我们应该使用完全限定名称 ::class

Fully qualified name should we use ::class

对于 Symfony,我习惯于使用 class 名称解析器 ::class(因为 php5.5):

use AppBundle\Entity\Product;

// ...

$resolver->setDefaults(array(
    'data_class' => Product::class
));

而不是 FQN 字符串:

$resolver->setDefaults(array(
    'data_class' => 'AppBundle\Entity\Product'
));

我这样做是为了提高可读性,因为在一些智能 IDE 中进行内省很方便。

但是,我在官方文档中看到的这种做法的例子并不多。所以我想知道这是因为兼容性问题 (< php5.5) 还是因为系统地导入我们需要引用的所有 classes 是不好的。

我的问题是:在我们需要引用 FQN 的任何地方使用 ::class 是一个好习惯吗?

答案好像是:

除了 php<5.5 的兼容性问题,没有什么可以阻止我们在任何需要的地方使用 ::class 名称解析器。