แนะนำตัว
ตามชื่อที่แนะนำ คลาสที่ไม่ระบุชื่อคือคลาสที่ไม่มีชื่อ มันมีไว้สำหรับใช้ครั้งเดียวและหากต้องการกำหนดคลาสทันที คุณลักษณะของคลาสที่ไม่ระบุชื่อได้รับการแนะนำตั้งแต่เวอร์ชัน 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"