Computer >> Máy Tính >  >> Lập trình >> PHP

Các lớp ẩn danh trong PHP

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"