首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >ClassName::class与PHP中的“ClassName”

ClassName::class与PHP中的“ClassName”
EN

Stack Overflow用户
提问于 2017-04-26 21:32:58
回答 3查看 330关注 0票数 0

在我的一个项目中,我们有一个验证对象的函数,比如:

代码语言:javascript
复制
if( true == valObj( $someObj, 'SomeClass' ) ) {
    //Do some work;
}

在使用这段代码时,我认为可以这样写:

代码语言:javascript
复制
if( true == valObj( $someObj, SomeClass::class ) ) {
    //Do some work;
}

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

EN

回答 3

Stack Overflow用户

发布于 2017-04-26 21:41:09

::class符号通常更好,因为它允许更容易的用法查找和重构:如果你使用PHPStorm这样的集成开发环境,你可以很容易地重命名一个类,它会找到OldClassName::class的所有用法并将其更新为NewClassname::class。这不是硬编码字符串变体的情况。

如果使用命名空间,则使用此表示法还可以减少行内字符。

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

票数 2
EN

Stack Overflow用户

发布于 2017-04-26 21:36:00

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

编辑:

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

票数 1
EN

Stack Overflow用户

发布于 2017-04-26 21:38:33

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

代码语言:javascript
复制
<?php
namespace foo {
    class bar {
    }

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

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/43635755

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档