PHP中的ClassName :: class vs'ClassName'

时间:2017-04-26 13:32:58

标签: php performance class optimization

在我的一个项目中,我们有一个函数来验证像:

这样的对象
if( true == valObj( $someObj, 'SomeClass' ) ) {
    //Do some work;
}

在使用它时,我认为这可以写成:

if( true == valObj( $someObj, SomeClass::class ) ) {
    //Do some work;
}

现在我只想知道哪种方法更好,为什么? 或者它们是一样的吗?

3 个答案:

答案 0 :(得分:2)

::class符号通常更好,因为它允许更容易的使用查找,从而重构:如果您使用像PHPStorm这样的IDE,您可以轻松地重命名一个类,它将查找并更新{{1}的所有用法到OldClassName::class。对于硬编码的字符串变体,情况并非如此。

如果使用名称空间使用此表示法也可以减少内联字符。

如果您运行的是支持此表示法的PHP版本,请使用它:)

答案 1 :(得分:1)

SomeClass::class返回包含类名的完整命名空间。 如果你使用字符串表示法,你必须自己添加名称空间(如果有的话)。

编辑:

您选择哪种符号并不重要,尽管我个人更喜欢字符串表示法,因为它会在滚动代码时直接向您显示该类所在的命名空间。

答案 2 :(得分:0)

来自php.net

特殊::class常量从PHP 5.5.0开始提供,并允许在编译时进行完全限定的类名解析,这对于命名空间类很有用。

<?php
namespace foo {
    class bar {
    }

    echo bar::class; // foo\bar
}
?>

这也是一个神奇的常数。看看http://php.net/manual/en/language.constants.predefined.php