⊗ppOpIfSII 73 of 107 menu

หลายอินเทอร์เฟซใน OOP ของ PHP

PHP ไม่มีฟังก์ชันการสืบทอดหลายระดับ - แต่ละคลาสสามารถมีได้เพียงคลาสหลักหนึ่งคลาสเท่านั้น อย่างไรก็ตาม สำหรับอินเทอร์เฟซแล้วเรื่องนี้แตกต่างออกไป: แต่ละคลาสสามารถใช้งาน (implement) อินเทอร์เฟซได้ไม่จำกัดจำนวน โดยให้ระบุชื่ออินเทอร์เฟซคั่นด้วยเครื่องหมายจุลภาคหลังจากคำสำคัญ implements

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

มาลองทำดูในทางปฏิบัติ สมมติว่าเรามีอินเทอร์เฟซ iTetragon นอกเหนือจากอินเทอร์เฟซ iFigure เมธอดของอินเทอร์เฟซนี้จะถูกใช้งานโดยคลาส Quadrate และ Rectangle เนื่องจากพวกมันมีด้าน 4 ด้าน แต่คลาส Disk จะไม่ใช้งาน

ให้อินเทอร์เฟซ iTetragon อธิบาย เก็ตเตอร์สำหรับด้านทั้งสี่ของรูปสี่เหลี่ยม:

<?php interface iTetragon { public function getA(); public function getB(); public function getC(); public function getD(); } ?>

สมมติว่าเรายังมีอินเทอร์เฟซ iFigure ซึ่งเราเคยสร้างไว้ก่อนหน้านี้:

<?php interface iFigure { public function getSquare(); public function getPerimeter(); } ?>

มาทำให้คลาส Quadrate ใช้งานสองอินเทอร์เฟซ โดยให้เราระบุ อินเทอร์เฟซทั้งสองคั่นด้วยเครื่องหมายจุลภาคหลังคำสำคัญ implements:

<?php class Quadrate implements iFigure, iTetragon { // จะมีโค้ดการใช้งานอยู่ที่นี่ } ?>

มาปรับปรุงคลาส Quadrate ของเราให้เสร็จสมบูรณ์ เพื่อให้มันใช้งานอินเทอร์เฟซ iTetragon เป็นที่เข้าใจได้ว่าสี่เหลี่ยมจัตุรัสของเราเป็นกรณีพิเศษ ของรูปสี่เหลี่ยม เพราะสี่เหลี่ยมจัตุรัส ทุกด้านมีความยาวเท่ากัน ดังนั้นเมธอดใหม่ทั้งหมด จะส่งคืนค่าเดียวกัน - ความกว้างของสี่เหลี่ยมจัตุรัส:

<?php class Quadrate implements iFigure, iTetragon { private $a; public function __construct($a) { $this->a = $a; } public function getA() { return $this->a; } public function getB() { return $this->a; } public function getC() { return $this->a; } public function getD() { return $this->a; } public function getSquare() { return $this->a * $this->a; } public function getPerimeter() { return 4 * $this->a; } } ?>

เห็นได้ชัดว่าในสี่เหลี่ยมผืนผ้าไม่ได้ ทุกด้านจะเหมือนกัน มีเพียงด้านตรงข้ามเท่านั้นที่เท่ากัน ในกรณีนี้ เมธอดใหม่จะแตกต่างออกไปเล็กน้อย และในสี่เหลี่ยมคางหมู โดยทั่วไปแล้ว 4 ด้านจะมีความยาวต่างกันทั้งหมด

อย่างไรก็ตาม ไม่สำคัญว่าเราจะพิจารณารูปร่างอะไร - สิ่งสำคัญคือรูปร่างทั้งหมดเหล่านี้ จะมีเมธอดที่อธิบายไว้ (แม้ว่า รูปร่างบางรูปจะพิเศษ) และทำงาน ในลักษณะเดียวกัน

ทำให้คลาส Rectangle ใช้งานสองอินเทอร์เฟซด้วย: ทั้ง iFigure และ iTetragon

สร้างอินเทอร์เฟซ iCircle พร้อมเมธอด getRadius และ getDiameter

ทำให้คลาส Disk ใช้งานสองอินเทอร์เฟซด้วย: ทั้ง iFigure และ iCircle

ไทย
AfrikaansAzərbaycanБългарскиবাংলাБеларускаяČeštinaDanskDeutschΕλληνικάEnglishEspañolEestiSuomiFrançaisहिन्दीMagyarՀայերենIndonesiaItaliano日本語ქართულიҚазақ한국어КыргызчаLietuviųLatviešuМакедонскиMelayuမြန်မာNederlandsNorskPolskiPortuguêsRomânăРусскийසිංහලSlovenčinaSlovenščinaShqipСрпскиSrpskiSvenskaKiswahiliТоҷикӣTürkmenTürkçeЎзбекOʻzbekTiếng Việt
เราใช้คุกกี้สำหรับการทำงานของเว็บไซต์ การวิเคราะห์ และการปรับเนื้อหาให้เหมาะสมส่วนบุคคล การประมวลผลข้อมูลเกิดขึ้นตาม นโยบายความเป็นส่วนตัว.
ยอมรับทั้งหมด ปรับแต่ง ปฏิเสธ