Giới thiệu
Như tên cho thấy, lớp ẩn danh là lớp không có tên. Nó có nghĩa là để sử dụng một lần và nếu người ta cần xác định một lớp ngay lập tức. Tính năng của lớp ẩn danh đã được giới thiệu kể từ phiên bản PHP 7.
Định nghĩa lớp ẩn danh nằm bên trong một biểu thức có kết quả là một đối tượng của lớp đó. Nó được xác định với lớp mới cú pháp như sau
Cú pháp
<?php $obj=new class { public function sayhello(){ echo "Hello World"; } }; $obj->sayhello(); ?>
Lớp ẩn danh có thể thực hiện mọi thứ mà một lớp bình thường có thể, tức là mở rộng lớp khác, triển khai giao diện hoặc sử dụng đặc điểm
Trong đoạn mã sau, một lớp ẩn danh mở rộng lớp cha và triển khai giao diện cha
Ví dụ
<?php class parentclass{ public function test1(){ echo "test1 method in parent class\n"; } } interface parentinterface{ public function test2(); } $obj=new class() extends parentclass implements parentinterface { public function test2(){ echo "implements test2 method from interface"; } }; $obj->test1(); $obj->test2(); ?>
Đầu ra
Kết quả như bên dưới -
test1 method in parent class implements test2 method from interface
Lớp ẩn danh lồng nhau
Lớp ẩn danh có thể được lồng vào bên trong phần thân của phương thức lớp khác. Tuy nhiên, đối tượng của nó không có quyền truy cập vào các thành viên riêng tư hoặc được bảo vệ của lớp bên ngoài
Ví dụ
<?php class testclass{ public function test1(){ return new class(){ public function test2(){ echo "test2 method of nested anonymous class"; } }; } } $obj2=new testclass(); $obj2->test1()->test2(); ?>
Đầu ra
Đoạn mã trên tạo ra kết quả sau -
test2 method of nested anonymous class
Tên nội bộ của lớp ẩn danh
Trình phân tích cú pháp PHP cung cấp một tên duy nhất cho lớp ẩn danh để sử dụng nội bộ
Ví dụ
<?php var_dump(get_class(new class() {} )); ?>
Đầu ra
Điều này sẽ tạo ra kết quả tương tự như sau -
string(60) "class@anonymous/home/cg/root/1569997/main.php0x7f1ba68da026"