web-dev-qa-db-ja.com

PHPの:: classとは何ですか?

PHPの::class表記とは何ですか?

構文の性質上、クイックGoogle検索では何も返されません。

コロンコロンクラス

この表記法を使用する利点は何ですか?

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

この機能はPHP 5.5で実装されました。

ドキュメント: 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"
];

更新

この機能はLate Static Bindingにも役立ちます。

__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
67
alphayax

classは特別なもので、完全修飾クラス名を取得するために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!
18
xdazz

以下を使用することに注意してください。

_if ($whatever instanceof static::class) {...}
_

これにより、構文エラーがスローされます。

unexpected 'class' (T_CLASS), expecting variable (T_VARIABLE) or '$'

ただし、代わりに次のことができます。

_if ($whatever instanceof static) {...}
_

または

_$class = static::class;
if ($whatever instanceof $class) {...}
_
0
Harald Witt