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