คอนสตรักเตอร์และดีสตรักเตอร์
เริ่มต้นออบเจ็กต์ด้วย __construct และจัดการทรัพยากรด้วย __destruct
คอนสตรักเตอร์และดีสตรักเตอร์ เป็นบทเรียน PHP Academy ฟรีบน CoddyKit นี่คือบทเรียนที่ 2 จากทั้งหมด 4 บทเรียน คุณสามารถอ่านบทเรียนทั้งหมดด้านล่างฟรี — จากนั้นลองปฏิบัติด้วยตัวคุณเองในเบราว์เซอร์พร้อมตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7 บทเรียนนี้เป็นส่วนหนึ่งของเส้นทางการเรียน PHP Academy และความก้าวหน้าของคุณจะซิงค์ข้ามเว็บและแอป CoddyKit คอร์ส PHP Academy มีบทเรียนทั้งหมด 4 บทเรียน
บทนำ: ตัวสร้างและตัวทำลาย
เมธอด __construct() จะทำงานโดยอัตโนมัติเมื่อสร้างอ็อบเจ็กต์ใหม่ เมธอด __destruct() จะทำงานเมื่ออ็อบเจ็กต์ถูกเก็บกวาดโดยระบบ PHP 8 เพิ่มความสามารถในการประกาศพร็อพเพอร์ตีผ่านตัวสร้าง
แนวคิดหลัก
แนวคิดสำคัญของตัวสร้างและตัวทำลาย:
__construct()ใช้เริ่มต้นค่าให้อ็อบเจ็กต์- การประกาศพร็อพเพอร์ตีผ่านตัวสร้างช่วยลดความยาวของโค้ด
__destruct()ใช้สำหรับการเก็บกวาดทรัพยากร เช่น ตัวจัดการไฟล์และการเชื่อมต่อ- เรียกตัวสร้างของคลาสแม่ด้วย
parent::__construct()
ตัวสร้างพื้นฐาน
ตัวอย่าง:
<?php
class User {
public string $name;
public string $email;
public function __construct(string $name, string $email) {
$this->name = $name;
$this->email = $email;
}
}
$user = new User('Alice', 'alice@example.com');
echo $user->name; // Aliceการประกาศพร็อพเพอร์ตีผ่านตัวสร้าง (PHP 8)
ต่อไป:
<?php
class User {
// Shorthand: declare and assign in one go
public function __construct(
public readonly string $name,
public readonly string $email,
private int $loginCount = 0,
) {}
}
$u = new User('Bob', 'bob@test.com');
echo $u->name; // Bobการตรวจสอบความถูกต้องในตัวสร้าง
ฝึกปฏิบัติ:
<?php
class PositiveInt {
public function __construct(private int $value) {
if ($value <= 0) {
throw new InvalidArgumentException(
"Value must be positive, got $value"
);
}
}
public function get(): int { return $this->value; }
}
$n = new PositiveInt(5); // OK
// new PositiveInt(-1); // throwsตัวทำลาย
เจาะลึก:
<?php
class FileLogger {
private mixed $handle;
public function __construct(string $path) {
$this->handle = fopen($path, 'a');
}
public function log(string $msg): void {
fwrite($this->handle, date('c') . ' ' . $msg . PHP_EOL);
}
public function __destruct() {
if ($this->handle) fclose($this->handle);
echo 'File handle released';
}
}รูปแบบตัวสร้างแบบตั้งชื่อ
การใช้งานขั้นสูง:
<?php
class Money {
private function __construct(
private float $amount,
private string $currency
) {}
public static function usd(float $a): self { return new self($a, 'USD'); }
public static function eur(float $a): self { return new self($a, 'EUR'); }
public function format(): string {
return number_format($this->amount, 2) . ' ' . $this->currency;
}
}
echo Money::usd(9.99)->format(); // 9.99 USDตัวสร้างของคลาสแม่
รูปแบบที่ใช้ในสถานการณ์จริง:
<?php
class Animal {
public function __construct(
protected string $name,
protected string $sound
) {}
}
class Dog extends Animal {
public function __construct(string $name) {
parent::__construct($name, 'Woof');
}
public function speak(): string {
return "{$this->name} says {$this->sound}!";
}
}
echo (new Dog('Rex'))->speak(); // Rex says Woof!การผูกแบบสแตติกภายหลังในตัวสร้าง
แนวทางปฏิบัติที่ดี:
<?php
class Base {
public static function create(): static {
return new static(); // 'static' resolves to calling class
}
}
class Child extends Base {}
$base = Base::create(); // Base object
$child = Child::create(); // Child object — static binding worksรูปแบบการใช้งานจริง
รวบรวมเนื้อหาทั้งหมดเข้าด้วยกันด้วยรูปแบบการใช้งานจริงสำหรับตัวสร้างและตัวทำลาย
ข้อผิดพลาดที่พบบ่อย
หลีกเลี่ยงข้อผิดพลาดที่พบบ่อยเหล่านี้เมื่อใช้ตัวสร้างและตัวทำลาย:
- เรียก parent::__construct() เสมอเมื่อขยายคลาส
- ใช้การประกาศพร็อพเพอร์ตีผ่านตัวสร้างใน PHP 8 ขึ้นไปเพื่อลดโค้ดส่วนเกิน
- ไม่รับประกันว่าตัวทำลายจะทำงานในเวลาใดเวลาหนึ่งโดยเฉพาะ
- ควรใช้ตัวสร้างแบบตั้งชื่อแทนการสร้างเมธอด __construct() หลายรูปแบบ
ตรวจสอบความเข้าใจอย่างรวดเร็ว
การประกาศพร็อพเพอร์ตีผ่านตัวสร้างใน PHP 8 คืออะไร
สรุป: ตัวสร้างและตัวทำลาย
คุณได้เรียนรู้เรื่องตัวสร้างและตัวทำลายแล้ว ประเด็นสำคัญที่ควรจำ:
- เรียก parent::__construct() เสมอเมื่อขยายคลาส
- ใช้การประกาศพร็อพเพอร์ตีผ่านตัวสร้างใน PHP 8 ขึ้นไปเพื่อลดโค้ดส่วนเกิน
- ไม่รับประกันว่าตัวทำลายจะทำงานในเวลาใดเวลาหนึ่งโดยเฉพาะ
- ควรใช้ตัวสร้างแบบตั้งชื่อแทนการสร้างเมธอด __construct() หลายรูปแบบ
คำถามที่พบบ่อย
บทเรียน “คอนสตรักเตอร์และดีสตรักเตอร์” ฟรีหรือไม่
ใช่ — ข้อความเต็มของ “คอนสตรักเตอร์และดีสตรักเตอร์” ฟรีให้อ่านที่นี่บนเว็บ เพื่อปฏิบัติแบบโต้ตอบ (ตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7) และปลดล็อคส่วนที่เหลือของคอร์ส PHP Academy ให้อัปเกรดเป็น CoddyKit PRO คอร์ส PHP Academy มีบทเรียนทั้งหมด 4 บทเรียน
คุณจะเรียนรู้อะไรในบทเรียน “คอนสตรักเตอร์และดีสตรักเตอร์”
เริ่มต้นออบเจ็กต์ด้วย __construct และจัดการทรัพยากรด้วย __destruct คุณปฏิบัติ PHP Academy ด้วยโค้ดที่ใช้งานได้จริงที่คุณเรียกใช้โดยตรงในเบราว์เซอร์ และติวเตอร์ AI ตลอด 24/7 ตอบคำถามของคุณขณะที่คุณไปผ่านบทเรียน
คุณต้องมีประสบการณ์ก่อนที่จะเริ่มเรียน PHP Academy หรือไม่
ไม่จำเป็นต้องมีประสบการณ์มาก่อน PHP Academy บน CoddyKit ออกแบบมาสำหรับผู้เริ่มต้นไปจนถึงผู้เรียนขั้นสูง คุณสามารถเริ่มต้นที่นี่หรือเริ่มจากตัวแรกและเรียนด้วยความเร็วของคุณเอง นี่คือบทเรียนที่ 2 จากทั้งหมด 4 บทเรียน
บทเรียน “คอนสตรักเตอร์และดีสตรักเตอร์” ใช้เวลานานแค่ไหน
บทเรียน CoddyKit ส่วนใหญ่ใช้เวลาประมาณ 5–10 นาที แต่ละบทเรียนจึงสั้นและเป็นแบบโต้ตอบ คุณสามารถก้าวหน้าอย่างต่อเนื่องและกลับมาเรียนต่อจากตรงที่เพิ่งหยุดบนเว็บและแอปได้เลย
ฉันเขียนและรันโค้ดในบทเรียน PHP Academy นี้ได้ไหม
ได้ บทเรียน PHP Academy ทุกบทมีตัวแก้ไขโค้ดในตัว คุณจึงเขียนและรันโค้ดจริงได้เลยในเบราว์เซอร์ และได้รับข้อเสนอแนะจาก AI ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ
บทเรียนทั้งหมดในหลักสูตรนี้
- คลาส พร็อพเพอร์ตี และเมธอด
- คอนสตรักเตอร์และดีสตรักเตอร์
- พร็อพเพอร์ตีและเมธอดแบบ static
- ภาพรวมเมธอดมหัศจรรย์