การประกาศคอนสตรัคเตอร์ในอินเทอร์เฟซใน OOP ใน PHP
ในอินเทอร์เฟซยังสามารถประกาศคอนสตรัคเตอร์
ของคลาสได้ด้วย ลองดูตัวอย่าง สมมติว่าเราตัดสินใจ
สร้างคลาส Rectangle ซึ่ง
จะมีเมธอดสำหรับหาพื้นที่, เส้นรอบรูป,
และรวมถึงคอนสตรัคเตอร์ที่รับพารามิเตอร์สองตัว
มาดูกันว่าเราจะอธิบายคลาสของเราด้วยอินเทอร์เฟซอย่างไร:
<?php
interface iRectangle
{
public function __construct($a, $b); // คอนสตรัคเตอร์ที่มีพารามิเตอร์สองตัว
public function getSquare();
public function getPerimeter();
}
?>
มาลองเขียนการนำอินเทอร์เฟซของเรา
iRectangle ไปใช้งานจริง:
<?php
class Rectangle implements iRectangle
{
private $a;
private $b;
public function __construct($a, $b)
{
$this->a = $a;
$this->b = $b;
}
public function getSquare()
{
return $this->a * $this->b;
}
public function getPerimeter()
{
return 2 * ($this->a + $this->b);
}
}
?>
การประกาศคอนสตรัคเตอร์ในอินเทอร์เฟซให้อะไรกับเรา? ประการแรก เราจะไม่ลืมที่จะนำคอนสตรัคเตอร์ ไปใช้ในคลาส ประการที่สอง อินเทอร์เฟซระบุชัดเจนว่า คอนสตรัคเตอร์ของคลาสจะต้องรับพารามิเตอร์สอง ตัว: ไม่มาก ไม่น้อย สิ่งนี้ยัง ช่วยป้องกันเราจากข้อผิดพลาดโดยไม่ตั้งใจ
ทำไมเราถึงสร้างอินเทอร์เฟซ iRectangle แยก
แทนที่จะเพิ่มคอนสตรัคเตอร์ลงในอินเทอร์เฟซ Figure?
เพราะว่ารูปทรงทั้งหมดมีจำนวนด้าน
ที่ต่างกัน และตามนั้น ก็มีจำนวน
พารามิเตอร์ในคอนสตรัคเตอร์ต่างกัน ดังนั้นเราจึงต้อง
สร้างอินเทอร์เฟซแยกที่เจาะจงมากขึ้น
สำหรับสี่เหลี่ยมผืนผ้าโดยเฉพาะ
สร้างอินเทอร์เฟซ iCube ที่
จะอธิบายรูปทรงลูกบาศก์ ให้อินเทอร์เฟซของคุณ
อธิบายคอนสตรัคเตอร์ โดยรับพารามิเตอร์เป็นความยาวด้านของลูกบาศก์ และรวมถึงเมธอดสำหรับการรับ
ปริมาตรของลูกบาศก์และพื้นที่ผิว
สร้างคลาส Cube ที่นำอินเทอร์เฟซ
iCube ไปใช้งาน
สร้างอินเทอร์เฟซ iUser ที่
จะอธิบายผู้ใช้ สันนิษฐานว่า
ผู้ใช้จะมีชื่อและอายุ และฟิลด์เหล่านี้จะ
ถูกส่งผ่านพารามิเตอร์ของคอนสตรัคเตอร์ ให้
อินเทอร์เฟซของคุณยังระบุด้วยว่าผู้ใช้
จะมีเกตเตอร์ (แต่ไม่ใช่เซตเตอร์) สำหรับชื่อและ
อายุ
สร้างคลาส User ที่นำอินเทอร์เฟซ
iUser ไปใช้งาน