Constructor: การเริ่มต้น Object อย่างถูกต้อง
หลังจากที่เราได้เรียนรู้เกี่ยวกับการสร้าง Class และ Object รวมถึงการกำหนด Properties และ Methods แล้ว ในบทนี้เราจะมาทำความรู้จักกับ Constructor ซึ่งเป็น Method พิเศษที่มีหน้าที่ในการเริ่มต้น Object เมื่อมีการสร้างขึ้นมาใหม่
ความหมายของ Constructor
Constructor คือ Method พิเศษที่ถูกเรียกใช้งานโดยอัตโนมัติเมื่อมีการสร้าง Object ใหม่จาก Class นั้นๆ หน้าที่หลักของ Constructor คือการกำหนดค่าเริ่มต้นให้กับ Properties ของ Object หรือทำการตั้งค่าอื่นๆ ที่จำเป็นเพื่อให้ Object อยู่ในสถานะที่พร้อมใช้งาน
ลองนึกภาพว่าคุณกำลังสร้างบ้าน Constructor ก็เหมือนกับพิธีวางศิลาฤกษ์ ที่เป็นการเริ่มต้นการก่อสร้างและกำหนดทิศทางของบ้านหลังนั้น
การสร้าง Constructor
ใน PHP, Constructor จะถูกสร้างโดยการกำหนด Method ที่มีชื่อว่า __construct() (มีขีดล่างสองตัวนำหน้า) ภายใน Class เมื่อมีการสร้าง Object ใหม่ PHP จะตรวจสอบว่ามี Method __construct() หรือไม่ ถ้ามีก็จะเรียกใช้งาน Method นี้
รูปแบบการสร้าง Constructor:
class MyClass {
public function __construct() {
// โค้ดที่ต้องการให้ทำงานเมื่อสร้าง Object
}
}
ตัวอย่าง:
class Person {
public $name;
public $age;
public function __construct() {
$this->name = "Unknown";
$this->age = 0;
}
}
$person = new Person();
echo $person->name; // Output: Unknown
echo $person->age; // Output: 0
จากตัวอย่างข้างต้น Constructor ของ Class Person จะกำหนดค่าเริ่มต้นให้กับ Properties $name เป็น "Unknown" และ $age เป็น 0 เมื่อเราสร้าง Object $person ขึ้นมา Properties เหล่านี้ก็จะมีค่าตามที่กำหนดไว้ใน Constructor
การใช้งาน Constructor
Constructor ไม่ได้มีไว้แค่กำหนดค่าเริ่มต้นแบบตายตัว เรายังสามารถส่งค่า Parameters เข้าไปใน Constructor เพื่อให้ Object มีค่าเริ่มต้นที่แตกต่างกันไปตามข้อมูลที่ได้รับ
ตัวอย่าง:
class Person {
public $name;
public $age;
public function __construct($name, $age) {
$this->name = $name;
$this->age = $age;
}
}
$person1 = new Person("Alice", 30);
echo $person1->name; // Output: Alice
echo $person1->age; // Output: 30
$person2 = new Person("Bob", 25);
echo $person2->name; // Output: Bob
echo $person2->age; // Output: 25
ในตัวอย่างนี้ Constructor รับ Parameters $name และ $age เมื่อเราสร้าง Object $person1 และ $person2 เราสามารถส่งชื่อและอายุเข้าไปได้ ทำให้ Object แต่ละตัวมีค่า Properties ที่แตกต่างกัน
Type Hinting ใน Constructor:
เราสามารถใช้ Type Hinting ใน Parameters ของ Constructor ได้เช่นเดียวกับ Methods ทั่วไป เพื่อกำหนดประเภทข้อมูลที่ Constructor คาดหวัง
class Product {
public string $name;
public float $price;
public function __construct(string $name, float $price) {
$this->name = $name;
$this->price = $price;
}
}
$product = new Product("Laptop", 1200.50);
echo $product->name; // Output: Laptop
echo $product->price; // Output: 1200.5
ในตัวอย่างนี้ เรากำหนดว่า Parameter $name ต้องเป็น String และ $price ต้องเป็น Float ถ้าเราพยายามส่งค่าประเภทอื่นเข้าไป PHP จะแสดงข้อผิดพลาด
Constructor Overloading (PHP ไม่รองรับโดยตรง)
ในภาษาโปรแกรมมิ่งบางภาษา (เช่น Java) Constructor Overloading เป็นการสร้าง Constructor หลายตัวที่มี Parameters แตกต่างกัน เพื่อให้สามารถสร้าง Object ได้หลายรูปแบบ แต่ PHP ไม่รองรับ Constructor Overloading โดยตรง
ใน PHP เราสามารถเลียนแบบ Constructor Overloading ได้โดยการกำหนด Default Values ให้กับ Parameters ของ Constructor
class User {
public $username;
public $email;
public function __construct(string $username = "guest", string $email = "") {
$this->username = $username;
$this->email = $email;
}
}
$user1 = new User(); // $username = "guest", $email = ""
$user2 = new User("john.doe"); // $username = "john.doe", $email = ""
$user3 = new User("jane.doe", "jane.doe@example.com"); // $username = "jane.doe", $email = "jane.doe@example.com"
ในตัวอย่างนี้ Constructor ของ Class User มี Parameter $username และ $email โดย $username มี Default Value เป็น "guest" และ $email มี Default Value เป็น "" ทำให้เราสามารถสร้าง Object ได้ 3 รูปแบบ:
new User(): สร้าง User โดยใช้ Default Valuesnew User("john.doe"): สร้าง User โดยกำหนด Username แต่ใช้ Default Value สำหรับ Emailnew User("jane.doe", "jane.doe@example.com"): สร้าง User โดยกำหนดทั้ง Username และ Email
สรุป
Constructor เป็น Method พิเศษที่สำคัญในการเริ่มต้น Object อย่างถูกต้อง ช่วยให้เราสามารถกำหนดค่าเริ่มต้นให้กับ Properties และทำการตั้งค่าอื่นๆ ที่จำเป็นเมื่อมีการสร้าง Object ใหม่ การใช้งาน Constructor อย่างถูกต้องจะช่วยให้ Code ของเรามีความยืดหยุ่นและง่ายต่อการบำรุงรักษา
ในบทต่อไป เราจะเรียนรู้เกี่ยวกับ $this Keyword ซึ่งเป็น Keyword ที่ใช้ในการอ้างอิง Object ตัวเองภายใน Class