2015-06-11 11 views
33

PHP'de ::class notasyonu nedir?PHP'de sınıf nedir?

Hızlı bir Google araması, sözdiziminin niteliğinden dolayı hiçbir şey döndürmez.

kolon kolon sınıf

bu notasyonu kullanmanın avantajı nedir?

protected $commands = [ 
    \App\Console\Commands\Inspire::class, 
]; 

cevap

14

class tam sınıf adını almak için php tarafından sağlandığı, ö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! 
+0

Laravel'in buna geçmeye karar vermesinin bir sebebi var mı? – Yada

+6

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

+1

@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

24

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 
0

aşağıdaki kullanmak lütfen unutmayın

$class = static::class; 
if ($whatever instanceof $class) {...} 

Belki bu bir PHP 7'de sabitlenmiştir.

İlgili konular