PHP có hằng số ma thuật ::class
phân giải tên lớp thành tên lớp đủ điều kiện của nó. Khi được sử dụng với một tên lớp, các câu lệnh use
và use as
sẽ được giải quyết hoặc không gian tên hiện tại sẽ được thêm tiền tố khiến nó trở thành một tên lớp đủ điều kiện
Ví dụ
namespace App\Demos;
use Foo\Bar;
use Bar\Baz as BBaz;
class Demo {}
// `use` statement is resolved:
echo Bar::class; // "Foo\Bar"
// `use` X `as` Y is resolved:
echo BBaz::class; // "Bar\Baz"
// Current namespace is resolved:
echo Demo::class; // "App\Demos\Demo"
Cho đến PHP 8. 0, hằng số ma thuật ::class
không được phép trên các đối tượng
$object = new Foo\Bar[];
echo $object::class;
// Fatal error: Cannot use ::class with dynamic class name.
Với PHP8. 0, bây giờ bạn có thể sử dụng hằng số ::class
trên các đối tượng và nó sẽ được giải quyết chính xác trong thời gian chạy
$object = new Foo\Bar[];
echo $object::class;
// PHP 8.0+:
// "Foo\Bar"
Kết quả tương tự như $object = new Foo\Bar[];
echo $object::class;
// Fatal error: Cannot use ::class with dynamic class name.
1
$object = new Foo\Bar[];
echo $object::class;
// Fatal error: Cannot use ::class with dynamic class name.
Hằng số ::class
trên một đối tượng được khởi tạo sẽ trả về giá trị trả về chính xác giống như một lệnh gọi
$object = new Foo\Bar[];
echo $object::class;
// Fatal error: Cannot use ::class with dynamic class name.
1get_class[$object] === $object::class;
Không phải đối tượng không được phép
Không được phép sử dụng ::class
trên một đối tượng không phải đối tượng
$object = array[];
$object::class;
// Fatal error: Uncaught TypeError: Cannot use ::class on value of type array in ...:...
Nếu bạn cần lấy kiểu của bất kỳ biến nào, PHP 8. 0 đi kèm với một hàm
$object = new Foo\Bar[];
echo $object::class;
// Fatal error: Cannot use ::class with dynamic class name.
5 mới mà bạn có thể gọi để lấy tên lớp, loại vô hướng, loại tài nguyên, v.v. tất cả từ một hàm tiện dụngTác động tương thích ngược
Trong các phiên bản PHP trước 8. 0, sử dụng ::class
trên một đối tượng sẽ gây ra lỗi nghiêm trọng. Bởi vì PHP 8. 0 đang nới lỏng lỗi này, điều này sẽ không tạo ra bất kỳ sự cố BC mới nào. Tuy nhiên, điều này sẽ làm cho mã của bạn yêu cầu PHP 8. 0 để chạy mà không có cách nào để bổ sung chức năng này cho các phiên bản cũ hơn
Đôi khi bạn cần lấy tên lớp hoặc tên lớp cha của một đối tượng trong PHP để làm điều gì đó có điều kiện, v.v. Bài đăng này xem xét làm thế nào để làm điều này
Các hàm có liên quan là get_class[] và get_parent_class[] và cả hai đều có thể được chuyển qua một thể hiện của đối tượng. Hàm get_parent_class[] cũng có thể được truyền vào tên lớp. Cả hai sau đó sẽ trả về tên của lớp dưới dạng một chuỗi
Ví dụ, chúng ta có hai lớp sau
Sau đó, chúng tôi tạo một thể hiện của thanh
$bar = new bar;
Chúng ta có thể lấy tên lớp và tên lớp cha như vậy
echo get_class[$bar]; // will echo 'bar' echo get_parent_class[$bar]; // will echo 'foo' echo get_parent_class['bar']; // will also echo 'foo'
Lưu ý rằng việc chuyển tên lớp dưới dạng chuỗi tới get_class[] sẽ không trả về tên lớp. Bạn đã biết tên lớp nếu bạn chuyển nó dưới dạng một chuỗi nên sẽ không có nhiều điểm khi gọi nó
Nếu bạn đang gọi các hàm từ chính lớp đó, bạn có thể chuyển nó $this. Ví dụ, chúng ta sẽ định nghĩa lại các lớp trên như sau
Hàm get_class[] lấy tên lớp của một đối tượng. Nó trả về FALSE nếu đối tượng không phải là đối tượng. Nếu đối tượng bị loại trừ khi ở trong một lớp, tên của lớp đó được trả về
cú pháp
get_class[object]
Thông số
đối tượng − Đối tượng được thử nghiệm. Bạn có thể tránh tham số này bên trong cass
Trở lại
Hàm get_class[] trả về tên lớp của một đối tượng. Nó trả về FALSE nếu đối tượng không phải là đối tượng. Nếu đối tượng bị loại trừ khi ở trong một lớp, tên của lớp đó được trả về
Hướng dẫn này sẽ thảo luận về cách lấy tên lớp PHP với độ phân giải tên lớp, PHP
YourNameSpace\HelloClassName
2 hằng số và phương thức YourNameSpace\HelloClassName
3. Bạn sẽ học cách sử dụng nó để phân giải tên lớp trong và ngoài lớpSử dụng Độ phân giải tên lớp để lấy tên lớp trong PHP
Bạn có thể lấy tên lớp thông qua độ phân giải tên lớp khi bạn có một không gian tên trong mã của mình. Kết quả là Tên Lớp Đủ Điều kiện [FQCN]
Tính năng này có sẵn trong PHP là
YourNameSpace\HelloClassName
4. Nó rất hữu ích khi bạn có một không gian tên trong PHP của mìnhTrong ví dụ mã sau, phân giải tên lớp thông qua
YourNameSpace\HelloClassName
4 sẽ trả về tên lớp của lớp được liên kết
đầu ra
YourNameSpace\HelloClassName
Nếu bạn muốn sử dụng tính năng này trong phương thức lớp, bạn có thể lấy tên lớp thông qua phương thức tĩnh. Bạn sẽ viết cái này là
YourNameSpace\HelloClassName
6Ví dụ mã tiếp theo cho thấy cách lấy tên lớp trong phương thức lớp
getClassName[];
?>
đầu ra
YourNameSpace\HelloClassName
Sử dụng hằng số YourNameSpace\HelloClassName
2 để lấy tên lớp trong PHP
YourNameSpace\HelloClassName
Hằng số
YourNameSpace\HelloClassName
2 là một phần của hằng số được xác định trước trong PHP. Bạn có thể sử dụng nó trong một lớp để lấy tên lớpĐoạn mã sau sẽ lấy tên lớp thông qua hằng số
YourNameSpace\HelloClassName
2HelloName[];
?>
đầu ra
Sử dụng hàm YourNameSpace\HelloClassName
3 để lấy tên lớp trong PHP
YourNameSpace\HelloClassName
PHP cung cấp một hàm
YourNameSpace\HelloClassName
3. Hàm này sẽ trả về tên lớp. Bạn có thể sử dụng nó trong lập trình thủ tục và hướng đối tượng. Đầu tiên, chúng ta sẽ xem xét phong cách thủ tụcKhối mã tiếp theo định nghĩa một lớp với một chức năng duy nhất. Hàm bên trong lớp sẽ trả về tên lớp khi đối số của nó là từ khóa
getClassName[];
?>
2Để lấy tên lớp, bạn tạo một đối tượng từ lớp;
class_name[];
// Also, you can get the class name
// via an external call
// echo get_class[$new_hello_object];
?>
đầu ra
Lúc đầu, đối với kiểu OOP, bạn có thể trả về hàm
YourNameSpace\HelloClassName
3 từ một lớp tĩnh
đầu ra
Phương pháp này có những hạn chế của nó bởi vì khi bạn mở rộng lớp, lớp mở rộng sẽ trả về tên của lớp cha chứ không phải lớp mở rộng. Để giải quyết vấn đề này, bạn có thể sử dụng
getClassName[];
?>
5Hàm
getClassName[];
?>
6 dựa trên liên kết tĩnh muộn. Với chức năng này, PHP sẽ trả về tên của lớp gọi. Nó giải quyết tình huống lớp mở rộng trả về tên của lớp cha chứ không phải tên của chính nó
đầu ra
Hello class name: Hello
Extended Hello class name: ExtendHello
Extended Hello parent class name: Hello
Sử dụng Lớp phản chiếu để lấy tên lớp trong PHP
Reflection Class là một cách ngắn gọn để lấy tên lớp trong PHP. Bạn tạo một lớp;
Lớp Reflection nên đặt đối số của nó thành
getClassName[];
?>
7. Sau đó, bạn có thể lấy tên lớp thông qua phương thức getClassName[];
?>
8 có sẵn với lớp ReflectiongetShortName[];
}
}
// Create a new class name
$hello_class_name = new Hello[];
// Get the class name
echo $hello_class_name->HelloClassName[];
?>
đầu ra
Sử dụng getClassName[];
?>
9 trên đối tượng để lấy tên lớp trong PHP
getClassName[];
?>
Tính năng
getClassName[];
?>
9 hoạt động trên các lớp trước PHP 8. Kể từ PHP, khi bạn tạo một đối tượng từ một lớp, bạn có thể lấy tên lớp từ đối tượng đã tạo bằng getClassName[];
?>
9