การประกาศคอนสตรัคเตอร์ในอินเทอร์เฟซใน OOP ใน PHP

ในอินเทอร์เฟซยังสามารถประกาศคอนสตรัคเตอร์ ของคลาสได้ด้วย ลองดูตัวอย่าง สมมติว่าเราตัดสินใจ สร้างคลาส Rectangle ซึ่ง จะมีเมธอดสำหรับหาพื้นที่, เส้นรอบรูป, และรวมถึงคอนสตรัคเตอร์ที่รับพารามิเตอร์สองตัว มาดูกันว่าเราจะอธิบายคลาสของเราด้วยอินเทอร์เฟซอย่างไร:

iRectangle.php<?php
  interface iRectangle
  {
    public function __construct($a, $b); // คอนสตรัคเตอร์ที่มีพารามิเตอร์สองตัว
    public function getSquare();
    public function getPerimeter();
  }
?>

มาลองเขียนการนำอินเทอร์เฟซของเรา iRectangle ไปใช้งานจริง:

Rectangle.php<?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? เพราะว่ารูปทรงทั้งหมดมีจำนวนด้าน ที่ต่างกัน และตามนั้น ก็มีจำนวน พารามิเตอร์ในคอนสตรัคเตอร์ต่างกัน ดังนั้นเราจึงต้อง สร้างอินเทอร์เฟซแยกที่เจาะจงมากขึ้น สำหรับสี่เหลี่ยมผืนผ้าโดยเฉพาะ

Задание 1

สร้างอินเทอร์เฟซ iCube ที่ จะอธิบายรูปทรงลูกบาศก์ ให้อินเทอร์เฟซของคุณ อธิบายคอนสตรัคเตอร์ โดยรับพารามิเตอร์เป็นความยาวด้านของลูกบาศก์ และรวมถึงเมธอดสำหรับการรับ ปริมาตรของลูกบาศก์และพื้นที่ผิว

Задание 2

สร้างคลาส Cube ที่นำอินเทอร์เฟซ iCube ไปใช้งาน

Задание 3

สร้างอินเทอร์เฟซ iUser ที่ จะอธิบายผู้ใช้ สันนิษฐานว่า ผู้ใช้จะมีชื่อและอายุ และฟิลด์เหล่านี้จะ ถูกส่งผ่านพารามิเตอร์ของคอนสตรัคเตอร์ ให้ อินเทอร์เฟซของคุณยังระบุด้วยว่าผู้ใช้ จะมีเกตเตอร์ (แต่ไม่ใช่เซตเตอร์) สำหรับชื่อและ อายุ

Задание 4

สร้างคลาส User ที่นำอินเทอร์เฟซ iUser ไปใช้งาน