PHPの::class
表記とは何ですか?
構文の性質上、クイックGoogle検索では何も返されません。
コロンコロンクラス
この表記法を使用する利点は何ですか?
protected $commands = [
\App\Console\Commands\Inspire::class,
];
この機能はPHP 5.5で実装されました。
ドキュメント: http://php.net/manual/en/migration55.new-features.php#migration55.new-features.class-name
2つの理由で非常に便利です。
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
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!
以下を使用することに注意してください。
_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) {...}
_