Bu özellik PHP 5.5'te gerçekleştirilmiştir.
Dokümantasyon: http://php.net/manual/en/migration55.new-features.php#migration55.new-features.class-name
Tesiste 2 nedenlerle çok yararlıdır.
- Artık sınıf adlarınızı artık dizilerde saklamanız gerekmez. Bu nedenle, birçok IDE, kodunuzu yeniden düzenlediğinizde bu sınıf adlarını alabilir
- Sınıfınızı çözmek için
use
anahtar sözcüğünü kullanabilirsiniz ve tam sınıf adını yazmanız gerekmez. Exemple için
:
use \App\Console\Commands\Inspire;
//...
protected $commands = [
Inspire::class, // Equivalent to "\App\Console\Commands\Inspire"
];
Güncelleme:
Bu özellik ayrıca Late Static Binding rahatlıkla kullanılabilir.
__CLASS__
büyü sabitini kullanmak yerine, üst sınıftaki türetilmiş sınıfın adını almak için static::class
özelliğini kullanabilirsiniz. Exemple için: yerine aşağıdaki
unexpected 'class' (T_CLASS), expecting variable (T_VARIABLE) or '$'
Ama yapabileceğiniz:
if ($whatever instanceof static::class) {...}
Bu sözdizimi-hatası atar:
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
Laravel'in buna geçmeye karar vermesinin bir sebebi var mı? – Yada
Inspire sınıfında sabit değildir. Bu php tarafından sağlanan bir sabittir. Tam nitelikli sınıf adını elde etmenin hızlı bir yoludur. http://php.net/manual/en/migration55.new-features.php#migration55.new-features.class-name – jfadich
@Yada Laravel'in kullandığı mantığın size göre daha az yer verdiğini düşünüyorum. bir yazım hatası.Aynı şeyi elde etmek için '\ App \ Console \ Commands \ Inspire' veya Inspire :: class dizgisini kullanabilirsiniz, ancak IDE'nizde bu hata ayıklama/yazım hatalarını yakalayacaktır. – jfadich