Câu trả lời:
Tính năng này đã được triển khai trong PHP 5.5.
Tài liệu: http://php.net/manual/en/migration55.new-features.php#migration55.new-features.class-name
Nó rất hữu ích vì 2 lý do.
use
từ khóa để giải quyết lớp của mình và bạn không cần phải viết tên lớp đầy đủ.Ví dụ như :
use \App\Console\Commands\Inspire;
//...
protected $commands = [
Inspire::class, // Equivalent to "App\Console\Commands\Inspire"
];
Cập nhật :
Tính năng này cũng hữu ích cho việc kết thúc tĩnh muộn .
Thay vì sử dụng __CLASS__
hằng số ma thuật, bạn có thể sử dụng static::class
tính năng này để lấy tên của lớp dẫn xuất bên trong lớp cha. Ví dụ:
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\...
và use App\...
được phép. Tôi sử dụng điều đó để tạo sự khác biệt giữa một lớp được chứa trong một không gian tên con và một lớp được chứa bên ngoài hệ thống phân cấp không gian tên hiện tại.
class
là đặc biệt, được cung cấp bởi php để có được tên lớp đủ điều kiện.
Xem 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!
Nếu bạn tò mò về danh mục nào ::class
, (cho dù đó là cấu trúc ngôn ngữ, v.v.), thì rất đơn giản. Đó là một hằng số . PHP gọi nó là "Hằng số đặc biệt". Nó đặc biệt vì nó được cung cấp bởi PHP.
Hãy lưu ý để sử dụng những điều sau:
if ($whatever instanceof static::class) {...}
Điều này sẽ tạo ra một lỗi cú pháp:
unexpected 'class' (T_CLASS), expecting variable (T_VARIABLE) or '$'
Nhưng bạn có thể làm như sau:
if ($whatever instanceof static) {...}
hoặc là
$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
tương đương với "App \ Console \ Commands \ Inspire", không có tiền tố gạch chéo ngược.