Réponses:
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
mot - clé pour résoudre votre classe et 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"
];
Mise à jour :
Cette fonction est également utile pour la liaison statique tardive .
Au lieu d'utiliser la __CLASS__
constante magique, vous pouvez utiliser la static::class
fonctionnalité pour obtenir le nom de la classe dérivée dans la classe parente. 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
use \App\...
et use App\...
sont autorisées. J'utilise cela pour faire la différence entre une classe contenue dans un sous-espace de noms et une classe contenue en dehors de la hiérarchie d'espaces de noms actuelle.
class
est spécial, qui est 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!
Si vous êtes curieux de savoir dans quelle catégorie ::class
appartient (que ce soit une construction de langage, etc.), c'est très simple. C'est une constante . PHP l'appelle une "constante spéciale". C'est spécial car il est fourni par PHP.
Veuillez noter que vous devez utiliser les éléments suivants:
if ($whatever instanceof static::class) {...}
Cela lancera une erreur de syntaxe:
unexpected 'class' (T_CLASS), expecting variable (T_VARIABLE) or '$'
Mais vous pouvez faire ce qui suit à la place:
if ($whatever instanceof static) {...}
ou
$class = static::class;
if ($whatever instanceof $class) {...}
$className = 'SomeCLass'; $className = new $className(); $methodName = 'someMethod'; $className->$methodName($arg1, $arg2, $arg3); /* or if args can be random array*/ call_user_func_array([$className, $methodName], $arg);
Inspire::class
équivaut à "App \ Console \ Commands \ Inspire", sans le préfixe barre oblique inverse.