Jaka jest ::class
notacja w PHP?
Szybkie wyszukiwanie w Google nic nie zwraca ze względu na naturę składni.
klasa okrężnicy
Jaka jest zaleta używania tej notacji?
protected $commands = [
\App\Console\Commands\Inspire::class,
];
Odpowiedzi:
Ta funkcja została zaimplementowana w PHP 5.5.
Dokumentacja: http://php.net/manual/en/migration55.new-features.php#migration55.new-features.class-name
Jest to bardzo przydatne z 2 powodów.
use
słowa kluczowego, aby rozwiązać swoją klasę i nie musisz wpisywać pełnej nazwy klasy.Na przykład :
use \App\Console\Commands\Inspire;
//...
protected $commands = [
Inspire::class, // Equivalent to "App\Console\Commands\Inspire"
];
Aktualizacja :
Ta funkcja jest również przydatna w przypadku późnego wiązania statycznego .
Zamiast używać __CLASS__
magicznej stałej, możesz użyć tej static::class
funkcji, aby uzyskać nazwę klasy pochodnej wewnątrz klasy nadrzędnej. Na przykład:
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\...
i use App\...
są dozwolone. Używam tego, aby odróżnić klasę zawartą w podprzestrzeni nazw od klas znajdujących się poza bieżącą hierarchią przestrzeni nazw.
class
jest specjalny, który jest dostarczany przez php, aby uzyskać w pełni kwalifikowaną nazwę klasy.
Zobacz 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!
Jeśli jesteś ciekawy, do której kategorii ::class
należy (czy jest to konstrukcja językowa itp.), Jest to bardzo proste. To jest stała . PHP nazywa to „specjalną stałą”. Jest wyjątkowy, ponieważ zapewnia go PHP.
Pamiętaj, aby użyć następujących:
if ($whatever instanceof static::class) {...}
Spowoduje to zgłoszenie błędu składniowego:
unexpected 'class' (T_CLASS), expecting variable (T_VARIABLE) or '$'
Zamiast tego możesz wykonać następujące czynności:
if ($whatever instanceof static) {...}
lub
$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
jest to odpowiednik „App \ Console \ Commands \ Inspire”, bez przedrostka ukośnika wstecznego.