Computer >> คอมพิวเตอร์ >  >> การเขียนโปรแกรม >> PHP

PHP คลาสนิรนาม


แนะนำตัว

ตามชื่อที่แนะนำ คลาสที่ไม่ระบุชื่อคือคลาสที่ไม่มีชื่อ มันมีไว้สำหรับใช้ครั้งเดียวและหากต้องการกำหนดคลาสทันที คุณลักษณะของคลาสที่ไม่ระบุชื่อได้รับการแนะนำตั้งแต่เวอร์ชัน PHP 7

คำจำกัดความของคลาสที่ไม่ระบุชื่ออยู่ภายในนิพจน์ซึ่งผลลัพธ์เป็นวัตถุของคลาสนั้น ถูกกำหนดด้วยคลาสใหม่ ไวยากรณ์ดังต่อไปนี้

ไวยากรณ์

<?php
$obj=new class {
   public function sayhello(){
      echo "Hello World";
   }
};
$obj->sayhello();
?>

คลาสนิรนามสามารถดำเนินการทุกอย่างที่ปกติสามารถทำได้ เช่น ขยายคลาสอื่น ใช้อินเทอร์เฟซ หรือใช้คุณลักษณะ

ในโค้ดต่อไปนี้ คลาสที่ไม่ระบุตัวตนจะขยาย parentclass และใช้ parentinterface

ตัวอย่าง

<?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();
?>

ผลลัพธ์

ผลลัพธ์จะเป็นดังนี้ −

test1 method in parent class
implements test2 method from interface

คลาสที่ไม่ระบุตัวตนที่ซ้อนกัน

คลาสนิรนามสามารถซ้อนอยู่ภายในเนื้อหาของเมธอดคลาสอื่น อย่างไรก็ตาม อ็อบเจ็กต์ของมันไม่สามารถเข้าถึงสมาชิกส่วนตัวหรือสมาชิกที่ได้รับการคุ้มครองของคลาสภายนอก

ตัวอย่าง

<?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();
?>

ผลลัพธ์

รหัสด้านบนสร้างผลลัพธ์ดังต่อไปนี้ -

test2 method of nested anonymous class

ชื่อภายในของคลาสที่ไม่ระบุชื่อ

PHP parser ให้ชื่อที่ไม่ซ้ำกับคลาสที่ไม่ระบุชื่อสำหรับการใช้งานภายใน

ตัวอย่าง

<?php
var_dump(get_class(new class() {} ));
?>

ผลลัพธ์

สิ่งนี้จะสร้างผลลัพธ์ที่คล้ายกับต่อไปนี้ -

string(60) "class@anonymous/home/cg/root/1569997/main.php0x7f1ba68da026"