什么是 PHP 中的 ::class?

2022-08-30 07:03:06

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

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

冒号类

使用这种符号有什么好处?

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

答案 1

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

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

由于2个原因,它非常有用。

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

例如:

use \App\Console\Commands\Inspire;

//...

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

更新

此功能对于后期静态绑定也很有用。

您可以使用该功能来获取父类内派生类的名称,而不是使用魔术常量。例如:__CLASS__static::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

答案 2

class是 special,由 php 提供,用于获取完全限定的类名。

请参阅 http://php.net/manual/en/migration55.new-features.php#migration55.new-features.class-name

<?php

class foo {
    const test = 'foobar!';
}

echo foo::test; // print foobar!

推荐