繁体   English   中英

PHP中的ClassName :: class与'ClassName'

[英]ClassName::class vs 'ClassName' in PHP

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

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

在使用此功能时,我认为可以这样写:

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

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

::class表示法通常更好,因为它可以更容易地找到用法并进行重构:如果使用类似PHPStorm的IDE,则可以轻松地重命名类,并且它将查找并将OldClassName::class所有用法更新为NewClassname::class OldClassName::class NewClassname::class 硬编码的字符串变体不是这种情况。

如果您使用命名空间,则使用此符号也可以减少内联字符。

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

SomeClass::class返回完整的名称空间,包括类名称。 如果您使用字符串符号,则必须自己添加名称空间(如果有)。

编辑:

选择哪种表示形式都没关系,尽管我个人更喜欢使用字符串表示法,因为它可以在滚动代码时直接向您显示该类所在的名称空间。

来自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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM