在我的一个项目中,我们有一个验证对象的函数,比如:
if( true == valObj( $someObj, 'SomeClass' ) ) {
//Do some work;
}在使用这段代码时,我认为可以这样写:
if( true == valObj( $someObj, SomeClass::class ) ) {
//Do some work;
}现在我只想知道哪种方法更好,为什么?还是说它们是一样的?
发布于 2017-04-26 21:41:09
::class符号通常更好,因为它允许更容易的用法查找和重构:如果你使用PHPStorm这样的集成开发环境,你可以很容易地重命名一个类,它会找到OldClassName::class的所有用法并将其更新为NewClassname::class。这不是硬编码字符串变体的情况。
如果使用命名空间,则使用此表示法还可以减少行内字符。
如果您正在运行支持此表示法的PHP版本,请使用它:)
发布于 2017-04-26 21:36:00
SomeClass::class返回包含类名的完整名称空间。同时,如果您使用字符串表示法,您必须自己添加名称空间(如果有的话)。
编辑:
选择哪种表示法并不重要,尽管我个人更喜欢字符串表示法,因为它可以在滚动代码时直接向您显示类所在的名称空间。
发布于 2017-04-26 21:38:33
从PHP5.5.0开始,php.net提供了特殊的::class常量,并允许在编译时进行完全限定的类名解析,这对命名空间类很有用。
<?php
namespace foo {
class bar {
}
echo bar::class; // foo\bar
}
?>这也是一个神奇的常数。看一看http://php.net/manual/en/language.constants.predefined.php
https://stackoverflow.com/questions/43635755
复制相似问题