::classPHP'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.
useSı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 ::classgirdiğ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::classters eğik çizgi öneki olmadan "App \ Console \ Commands \ Inspire" ile eşdeğerdir.