::class
PHP'deki gösterim nedir ?
Hızlı bir Google araması, söz diziminin doğası nedeniyle hiçbir şey döndürmez.
kolon kolon sınıfı
Bu gösterimi kullanmanın avantajı nedir?
protected $commands = [
\App\Console\Commands\Inspire::class,
];
Yanıtlar:
Bu özellik PHP 5.5'te uygulanmıştır.
Belgeler: http://php.net/manual/en/migration55.new-features.php#migration55.new-features.class-name
2 nedenden dolayı çok kullanışlıdır.
use
Sınıfınızı çözmek için anahtar kelimeyi kullanabilirsiniz ve tam sınıf adını yazmanız gerekmez.Örneğin :
use \App\Console\Commands\Inspire;
//...
protected $commands = [
Inspire::class, // Equivalent to "App\Console\Commands\Inspire"
];
Güncelleme :
Bu özellik, Geç Statik Bağlama için de kullanışlıdır .
__CLASS__
Sihirli sabiti kullanmak yerine static::class
, ana sınıfın içindeki türetilmiş sınıfın adını almak için özelliği kullanabilirsiniz . Örneğin:
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\...
ve use App\...
izin verildiğine dikkat edin . Bunu, bir alt ad alanında bulunan bir sınıf ile mevcut ad alanı hiyerarşisinin dışında bulunan bir sınıf arasında fark yaratmak için kullanıyorum.
class
tam nitelikli sınıf adını almak için php tarafından sağlanan özeldir.
Bkz 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!
Hangi kategoriye ::class
girdiğini merak ediyorsanız (bir dil yapısı mı, vb.), Çok basit. Bu bir var sabiti . PHP buna "Özel Sabit" diyor. Özeldir çünkü PHP tarafından sağlanır.
Lütfen aşağıdakileri kullanmaya dikkat edin:
if ($whatever instanceof static::class) {...}
Bu bir sözdizimi hatası verir:
unexpected 'class' (T_CLASS), expecting variable (T_VARIABLE) or '$'
Ancak bunun yerine aşağıdakileri yapabilirsiniz:
if ($whatever instanceof static) {...}
veya
$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
ters eğik çizgi öneki olmadan "App \ Console \ Commands \ Inspire" ile eşdeğerdir.