การแนะนำสู่ OOP ใน PHP

ตอนนี้เราจะมาศึกษา OOP ใน PHP กัน ลองมาดูตัวอย่างจากชีวิตจริง แล้วค่อยนำมันมาใช้ใน PHP

ในฐานะตัวอย่างลองพิจารณารถยนต์ มันมีล้อ สี ประเภทร่างรถ ปริมาตรเครื่องยนต์ และอื่นๆ นอกจากนั้นคนขับ สามารถสั่งคำสั่งให้มันได้: วิ่ง, หยุด, เลี้ยวขวา, เลี้ยวซ้าย เป็นต้น

เราสามารถพูดได้ว่ามีคลาสของรถยนต์อยู่ ซึ่งมีคุณสมบัติร่วมกัน (ทุกคันมีล้อและทุกคัน สามารถรับคำสั่งได้)

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

กล่าวคือตัวคลาสเองนั้นคือพิมพ์เขียว ที่โรงงานใช้ผลิตรถยนต์ ส่วนอ็อบเจกต์ คือตัวรถยนต์เองที่ถูกสร้างมาจากพิมพ์เขียวเหล่านั้น

ใน PHP คลาสถูกสร้างด้วยคีย์เวิร์ด class ตามด้วยชื่อ ของคลาสนั้น ลองสร้างคลาสCarกัน:

php<?php
  class Car
  {
    // โค้ดตรงนี้ ก็คือพิมพ์เขียว PHP ของรถยนต์
  }
?>

ตอนนี้ให้ระบุในพิมพ์เขียวของเราว่ารถยนต์ใดๆ ที่สร้างจากพิมพ์เขียวนี้จะ มีคุณสมบัติสำหรับสีและคุณสมบัติสำหรับปริมาณ น้ำมันเชื้อเพลิง

เพื่อการนี้ ภายในคลาสให้เขียนคุณสมบัติ $color และคุณสมบัติ$fuel:

php<?php
  class Car
  {
    // กำหนดคุณสมบัติ (โดยพื้นฐานคือตัวแปรของคลาส):
    public $color; // สีของรถยนต์
    public $fuel; // ปริมาณน้ำมันเชื้อเพลิง
  }
?>

ตอนนี้ลองสร้างเมธอดของคลาสเรากัน ใน PHP เมธอด เหมือนกับฟังก์ชันทั่วไป ถูกประกาศ ด้วยคีย์เวิร์ดfunction โดยหน้าคีย์เวิร์ดนี้จะเขียนคีย์เวิร์ด public

ตามที่ได้กล่าวไว้ข้างต้น รถยนต์ของเรา สามารถวิ่งได้ สามารถเลี้ยวได้ สามารถหยุดได้ มาสร้างเมธอดที่สอดคล้องกันในคลาสของเรากัน:

php<?php
  class Car
  {
    public $color; // สีของรถยนต์
    public $fuel;  // ปริมาณน้ำมันเชื้อเพลิง
    
    // คำสั่งวิ่ง:
    public function go()
    {
      // โค้ด PHP บางอย่าง
    }
    
    // คำสั่งเลี้ยว:
    public function turn()
    {
      // โค้ด PHP บางอย่าง
    }
    
    // คำสั่งหยุด:
    public function stop()
    {
      // โค้ด PHP บางอย่าง
    }
  }
?>

เราทำพิมพ์เขียวของรถยนต์ของเราเสร็จแล้ว ตอนนี้ต้องไปที่โรงงานและสร้าง อ็อบเจกต์ของคลาสนี้ (นั่นคือ รถยนต์คันหนึ่งโดยเฉพาะ)

ใน PHP สิ่งนี้ทำได้ด้วยคีย์เวิร์ด new หลังจากที่เขียนชื่อคลาส:

php<?php
  new Car;
?>

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

ให้ตัวแปรนี้ชื่อว่า$myCar - เก็บอ็อบเจกต์ที่เราสร้างไว้ในนั้น:

php<?php
  $myCar = new Car;
?>

หลังจากสร้างรถยนต์แล้ว สามารถเข้าถึง คุณสมบัติของมันได้ การเข้าถึงคุณสมบัติเกิดขึ้น ผ่านเครื่องหมายลูกศร-> ลองกำหนด คุณสมบัติของอ็อบเจกต์ของเรากัน:

php<?php
  $myCar = new Car; // สั่งให้โรงงานสร้างรถยนต์
  
  // กำหนดคุณสมบัติของอ็อบเจกต์:
  $myCar->color = 'red'; // ทาสีแดง
  $myCar->fuel = 50; // เติมน้ำมันเชื้อเพลิง
?>

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

การเข้าถึงเมธอดก็เกิดขึ้นผ่าน เครื่องหมายลูกศรเช่นกัน แต่ ต่างจากคุณสมบัติ หลังจาก ชื่อเมธอดต้องเขียนเครื่องหมายวงเล็บ มาลองสั่งอ็อบเจกต์ของเรากัน:

php<?php
  $myCar->go();
  $myCar->turn();
  $myCar->stop();
?>