Diese Funktion wurde in PHP 5.5 implementiert.
Dokumentation: http://php.net/manual/en/migration55.new-features.php#migration55.new-features.class-name
Es ist aus zwei Gründen sehr nützlich.
- Sie müssen Ihre Klassennamen nicht mehr in Zeichenfolgen speichern. Daher können viele IDEs diese Klassennamen abrufen, wenn Sie Ihren Code umgestalten
- Sie können das
use
Schlüsselwort verwenden, um Ihre Klasse aufzulösen, und Sie müssen nicht den vollständigen Klassennamen schreiben.
Zum Beispiel :
use \App\Console\Commands\Inspire;
//...
protected $commands = [
Inspire::class, // Equivalent to "App\Console\Commands\Inspire"
];
Update :
Diese Funktion ist auch für die späte statische Bindung nützlich .
Anstatt die __CLASS__
magische Konstante zu verwenden, können Sie die static::class
Funktion verwenden, um den Namen der abgeleiteten Klasse innerhalb der übergeordneten Klasse abzurufen. Beispielsweise:
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
entspricht dies "App \ Console \ Commands \ Inspire" ohne das Präfix für einen Schrägstrich.use \App\...
unduse App\...
erlaubt sind. Ich benutze das, um den Unterschied zwischen einer in einem Subnamespace enthaltenen Klasse und einer außerhalb der aktuellen Namespace-Hierarchie enthaltenen Klasse zu machen.class
ist etwas Besonderes, das von PHP bereitgestellt wird, um den vollständig qualifizierten Klassennamen zu erhalten.Siehe http://php.net/manual/en/migration55.new-features.php#migration55.new-features.class-name .
quelle
Wenn Sie neugierig sind, in welche Kategorie
::class
fällt (ob es sich um ein Sprachkonstrukt handelt usw.), ist dies sehr einfach. Es ist eine Konstante . PHP nennt es eine "spezielle Konstante". Es ist etwas Besonderes, weil es von PHP bereitgestellt wird.https://www.php.net/manual/en/language.oop5.constants.php
quelle
Bitte beachten Sie Folgendes:
Dies löst einen Syntaxfehler aus:
Sie können stattdessen Folgendes tun:
oder
quelle
$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);