Antworten:
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.
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
use \App\...
und use 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 .
<?php
class foo {
const test = 'foobar!';
}
echo foo::test; // print foobar!
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.
Bitte beachten Sie Folgendes:
if ($whatever instanceof static::class) {...}
Dies löst einen Syntaxfehler aus:
unexpected 'class' (T_CLASS), expecting variable (T_VARIABLE) or '$'
Sie können stattdessen Folgendes tun:
if ($whatever instanceof static) {...}
oder
$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
entspricht dies "App \ Console \ Commands \ Inspire" ohne das Präfix für einen Schrägstrich.