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

PHP Class Abstraction


แนะนำตัว

ในการเขียนโปรแกรมเชิงวัตถุ คลาสนามธรรมคือคลาสที่สร้างอินสแตนซ์ได้ เช่น ไม่สามารถประกาศวัตถุของคลาสดังกล่าวได้ PHP รองรับแนวคิดของคลาส abstarct ตั้งแต่เวอร์ชัน 5.0

คลาสที่กำหนดด้วยคีย์เวิร์ด abstract จะกลายเป็นคลาสนามธรรม นอกจากนี้ คลาสใดๆ ที่มีเมธอดนามธรรมอย่างน้อยหนึ่งวิธีถือเป็นนามธรรมด้วย

ไวยากรณ์

<?php
class testclass{
   //
}
?>

หากเราพยายามสร้างอ็อบเจ็กต์ oof คลาสนี้ PHP parser จะส่งข้อผิดพลาดดังต่อไปนี้ −

$a=new testclass();
PHP Fatal error: Uncaught Error: Cannot instantiate abstract class testclass

วิธีการแบบนามธรรม

วิธีการแบบนามธรรมจะประกาศเฉพาะลายเซ็น เช่น การมองเห็น อาร์กิวเมนต์ และประเภทการส่งคืนด้วยคำแนะนำประเภท และไม่มีฟังก์ชันการทำงานใดๆ คลาสที่สืบทอดคลาสนามธรรมดังกล่าวจะต้องแทนที่ (ให้คำจำกัดความ) เมธอดนามธรรมทั้งหมด วิธีการที่สอดคล้องกันในคลาสย่อยต้องมีลายเซ็นเดียวกันกับในคลาสพาเรนต์ หากคลาสย่อยไม่เป็นไปตามเงื่อนไขนี้ PHP parser จะส่งข้อยกเว้น คลาสที่ขยายคลาสนามธรรมสามารถสร้างอินสแตนซ์ได้แล้ว จึงเรียกว่าคลาสที่เป็นรูปธรรม

ในตัวอย่างต่อไปนี้ คลาสพาเรนต์มีเมธอดนามธรรมสองเมธอด ซึ่งมีเพียงหนึ่งเมธอดที่กำหนดใหม่ในคลาสย่อย ซึ่งส่งผลให้เกิดข้อผิดพลาดดังต่อไปนี้ -

ตัวอย่าง

<?php
abstract class testclass{
   abstract function test1();
   abstract function hello();
}
class myclass extends testclass{
   function test1(){
      echo "Overrides parent test method";
   }
}
$a=new myclass();
?>

ผลลัพธ์

ต่อไปนี้เป็นข้อความแสดงข้อผิดพลาด

PHP Fatal error: Class myclass contains 1 abstract method and must therefore be declared abstract or implement the remaining methods (testclass::hello)

วิธีนามธรรมพร้อมอาร์กิวเมนต์

เมื่อเมธอด abstract ถูกกำหนดด้วยอาร์กิวเมนต์ จะต้องถูกแทนที่ในคลาสย่อยด้วยจำนวนอาร์กิวเมนต์เท่ากัน

ในตัวอย่างต่อไปนี้ เมธอดนามธรรมในคลาสพาเรนต์มีสองอาร์กิวเมนต์ คลาสย่อยยังกำหนดฟังก์ชันเดียวกันกับสองอาร์กิวเมนต์

ตัวอย่าง

<?php
abstract class testclass{
   abstract function hello($name, $age);
}
class myclass extends testclass{
   function hello($name, $age){
      echo "My name is $name and my age is $age";
   }
}
$a=new myclass();
$a->hello("Ravi",20);
?>

ผลลัพธ์

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

My name is Ravi and my age is 20