在我的一个项目中,我们有一个函数来验证像:
这样的对象if( true == valObj( $someObj, 'SomeClass' ) ) {
//Do some work;
}
在使用它时,我认为这可以写成:
if( true == valObj( $someObj, SomeClass::class ) ) {
//Do some work;
}
现在我只想知道哪种方法更好,为什么? 或者它们是一样的吗?
答案 0 :(得分:2)
::class
符号通常更好,因为它允许更容易的使用查找,从而重构:如果您使用像PHPStorm这样的IDE,您可以轻松地重命名一个类,它将查找并更新{{1}的所有用法到OldClassName::class
。对于硬编码的字符串变体,情况并非如此。
如果使用名称空间使用此表示法也可以减少内联字符。
如果您运行的是支持此表示法的PHP版本,请使用它:)
答案 1 :(得分:1)
SomeClass::class
返回包含类名的完整命名空间。
如果你使用字符串表示法,你必须自己添加名称空间(如果有的话)。
编辑:
您选择哪种符号并不重要,尽管我个人更喜欢字符串表示法,因为它会在滚动代码时直接向您显示该类所在的命名空间。
答案 2 :(得分:0)
特殊::class
常量从PHP 5.5.0开始提供,并允许在编译时进行完全限定的类名解析,这对于命名空间类很有用。
<?php
namespace foo {
class bar {
}
echo bar::class; // foo\bar
}
?>
这也是一个神奇的常数。看看http://php.net/manual/en/language.constants.predefined.php