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.
- Vous n'avez plus besoin de stocker vos noms de classe dans des chaînes. Ainsi, de nombreux IDE peuvent récupérer ces noms de classe lorsque vous refactorisez votre code
- Vous pouvez utiliser le
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
Inspire::class
équivaut à "App \ Console \ Commands \ Inspire", sans le préfixe barre oblique inverse.use \App\...
etuse 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 .
la source
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.https://www.php.net/manual/en/language.oop5.constants.php
la source
Veuillez noter que vous devez utiliser les éléments suivants:
Cela lancera une erreur de syntaxe:
Mais vous pouvez faire ce qui suit à la place:
ou
la source
$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);