Jawaban:
Fitur ini diimplementasikan di PHP 5.5.
Dokumentasi: http://php.net/manual/en/migration55.new-features.php#migration55.new-features.class-name
Ini sangat berguna karena 2 alasan.
use
kata kunci untuk menyelesaikan kelas Anda dan Anda tidak perlu menulis nama kelas secara lengkap.Sebagai contoh :
use \App\Console\Commands\Inspire;
//...
protected $commands = [
Inspire::class, // Equivalent to "App\Console\Commands\Inspire"
];
Update :
Fitur ini juga berguna untuk Late Static Binding .
Alih-alih menggunakan __CLASS__
konstanta ajaib, Anda bisa menggunakan static::class
fitur tersebut untuk mendapatkan nama kelas turunan di dalam kelas induk. Sebagai contoh:
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\...
dan use App\...
diperbolehkan. Saya menggunakannya untuk membuat perbedaan antara kelas yang terdapat dalam subnamespace dan kelas yang berada di luar hierarki namespace saat ini.
class
adalah spesial, yang disediakan oleh php untuk mendapatkan nama kelas yang memenuhi syarat.
Lihat 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!
Jika Anda penasaran dalam kategori mana ::class
, (apakah itu konstruksi bahasa, dll), ini sangat sederhana. Itu konstan . PHP menyebutnya sebagai "Konstanta Khusus". Ini istimewa karena disediakan oleh PHP.
Harap perhatikan untuk menggunakan yang berikut ini:
if ($whatever instanceof static::class) {...}
Ini akan memunculkan kesalahan sintaks:
unexpected 'class' (T_CLASS), expecting variable (T_VARIABLE) or '$'
Namun Anda dapat melakukan hal berikut:
if ($whatever instanceof static) {...}
atau
$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
sama dengan "App \ Console \ Commands \ Inspire", tanpa awalan garis miring ke belakang.