Apa ::class
notasi di PHP?
Pencarian Google cepat tidak menghasilkan apa-apa karena sifat sintaksnya.
kelas usus besar
Apa keuntungan menggunakan notasi ini?
protected $commands = [
\App\Console\Commands\Inspire::class,
];
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
Inspire::class
sama dengan "App \ Console \ Commands \ Inspire", tanpa awalan garis miring ke belakang.use \App\...
danuse 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 .
sumber
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.https://www.php.net/manual/en/language.oop5.constants.php
sumber
Harap perhatikan untuk menggunakan yang berikut ini:
Ini akan memunculkan kesalahan sintaks:
Namun Anda dapat melakukan hal berikut:
atau
sumber
$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);