php - PHP 中的::class 是什么?

标签 php class laravel

什么是 PHP 中的 ::class 表示法?

由于语法的性质,快速的 Google 搜索不会返回任何内容。

冒号冒号类

使用这种表示法有什么好处?

protected $commands = [
    \App\Console\Commands\Inspire::class,
];

最佳答案

SomeClass::class 将返回 SomeClass 的完全限定名称,包括命名空间。此功能在 PHP 5.5 中实现。

文档:http://php.net/manual/en/migration55.new-features.php#migration55.new-features.class-name

它非常有用有两个原因。

  • 您不必再将类名存储在字符串中。因此,许多 IDE 在您重构代码时可以检索这些类名
  • 您可以使用 use 关键字来解析您的类,而无需编写完整的类名。

例如:

use \App\Console\Commands\Inspire;

//...

protected $commands = [
    Inspire::class, // Equivalent to "App\Console\Commands\Inspire"
];

更新:

此功能对 Late Static Binding 也很有用.

您可以使用 static::class 功能来获取父类中派生类的名称,而不是使用 __CLASS__ 魔术常量。例如:

class A {

    public function getClassName(){
        return __CLASS__;
    }

    public function getRealClassName() {
        return static::class;
    }
}

class B extends A {}

$a = new A;
$b = new B;

echo $a->getClassName();      // A
echo $a->getRealClassName();  // A
echo $b->getClassName();      // A
echo $b->getRealClassName();  // B

关于php - PHP 中的::class 是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30770148/

相关文章:

c# - C# 中的匿名类

c++ - 具有相同名称的类 - 是否仅限于同一翻译单元?

php - Laravel 黄昏 : how to use in-memory DB for testing

javascript - 如何从返回的响应中获取特定值

laravel - 如何预先加载多态关系的不同嵌套关系?

php - 浏览器关闭时 PHP 是否在后台运行?

javascript - 动态调用类函数

IS NOT NULL MySQL 查询上的 PHP 白屏

javascript - 在html中使用放大镜将鼠标悬停在图像上

php - 为什么我不能在 Drupal 中使用 PHP 函数?