web-dev-qa-db-fra.com

Qu'est-ce que :: class en PHP?

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,
];
64
Yada

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 classes dans des chaînes. Ainsi, de nombreux IDE peuvent récupérer ces noms de classes lorsque vous refactorisez votre code
  • Vous pouvez utiliser le mot clé 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
55
alphayax

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!
16
xdazz

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.

1
Harald Witt