Quelle est la notation ::class
en PHP?
Une recherche rapide sur Google ne renvoie rien en raison de la nature de la syntaxe.
classe du côlon
Quel est l'avantage d'utiliser cette notation?
protected $commands = [
\App\Console\Commands\Inspire::class,
];
Cette fonctionnalité a été implémentée dans PHP 5.5.
Documentation: http://php.net/manual/en/migration55.new-features.php#migration55.new-features.class-name
C'est très utile pour 2 raisons.
use
pour résoudre votre classe. Vous n'avez pas besoin d'écrire le nom complet de la classe.Par exemple :
use \App\Console\Commands\Inspire;
//...
protected $commands = [
Inspire::class, // Equivalent to "App\Console\Commands\Inspire"
];
Mettre à jour :
Cette fonctionnalité est également utile pour Late Statique Binding.
Au lieu d'utiliser la constante magique __CLASS__
, vous pouvez utiliser la fonctionnalité static::class
pour obtenir le nom de la classe dérivée à l'intérieur de la classe parent. Par exemple:
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
est spécial, fourni par php pour obtenir le nom de classe complet.
Voir 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!
S'il vous plaît être conscient d'utiliser les éléments suivants:
if ($whatever instanceof static::class) {...}
Cela provoquera une erreur de syntaxe:
'classe' inattendue (T_CLASS), variable d'attente (T_VARIABLE) ou '$'
Mais vous pouvez plutôt effectuer les opérations suivantes:
$class = static::class;
if ($whatever instanceof $class) {...}
Peut-être que ceci est déjà corrigé dans PHP 7.