آموزش رایگان PHP

آموزش متدهای جادویی Constructor و Destructor در PHP (سازنده و مخرب)

1405/07/28 22:02 محراب حسن زاده
آموزش متدهای جادویی Constructor و Destructor در PHP (سازنده و مخرب)

مقدمه‌ای بر متدهای جادویی در PHP

در برنامه‌نویسی شیءگرا (OOP)، متدهای جادویی (Magic Methods) متدهایی هستند که با دو علامت زیرخط یا آندراسکور (__) شروع می‌شوند و در شرایط خاصی به صورت خودکار توسط موتور PHP صدا زده می‌شوند. دو مورد از حیاتی‌ترین و پرکاربردترین متدهای جادویی، متد سازنده (Constructor) و متد مخرب (Destructor) هستند که مدیریت چرخه زندگی یک شیء را بر عهده دارند.

متد سازنده (Constructor) چیست؟

متد سازنده یا __construct متدی است که به محض نمونه‌سازی (Instantiation) یا ساخت یک شیء جدید از روی کلاس، به صورت کاملاً خودکار اجرا می‌شود. هدف اصلی این متد، مقداردهی اولیه به ویژگی‌ها (Properties) و آماده‌سازی پیش‌نیازهای شیء است.


class Car {
    public $brand;
    public $color;

    // تعریف متد سازنده
    public function __construct($brand, $color) {
        $this--->brand = $brand;
        $this->color = $color;
        echo "یک ماشین از برند {$this->brand} با رنگ {$this->color} ساخته شد.\n";
    }
}

// ساخت یک شیء جدید (متد سازنده خودکار اجرا می‌شود)
$myCar = new Car('Tesla', 'Black');

قابلیت Constructor Property Promotion در PHP 8

در نسخه‌های جدید PHP (نسخه 8 به بعد)، شما می‌توانید برای کاهش کدهای تکراری، متغیرها را مستقیماً درون پارامترهای سازنده تعریف و مقداردهی کنید. به این قابلیت اصطلاحاً Constructor Property Promotion گفته می‌شود:


class User {
    // تعریف و مقداردهی همزمان ویژگی‌ها در سازنده
    public function __construct(
        public string $name,
        public string $email
    ) {}
}

$user = new User('Ali', 'ali@example.com');
echo $user--->name; // خروجی: Ali

متد مخرب (Destructor) چیست؟

متد مخرب یا __destruct دقیقاً برعکس سازنده عمل می‌کند. این متد زمانی اجرا می‌شود که طول عمر شیء به پایان رسیده باشد؛ یعنی زمانی که هیچ ارجاعی به شیء در برنامه وجود نداشته باشد، شیء با دستور unset() نابود شود یا اجرای کل اسکریپت PHP به پایان برسد.

بیشترین کاربرد متد مخرب برای کارهای تمیزکاری (Cleanup) مانند بستن اتصالات دیتابیس، بستن فایل‌های باز شده و آزادسازی منابع سیستم است.


class DatabaseConnection {
    private $connection;

    public function __construct() {
        $this--->connection = "اتصال فعال به دیتابیس";
        echo "اتصال برقرار شد.\n";
    }

    // متد مخرب برای بستن اتصال
    public function __destruct() {
        echo "اتصال دیتابیس بسته شد و منابع آزاد شدند.\n";
    }
}

// ایجاد شیء
$db = new DatabaseConnection();

// انجام عملیات فرضی در برنامه
echo "در حال خواندن اطلاعات...\n";

// با پایان اسکریپت یا نابودی شیء، متد مخرب به صورت خودکار فراخوانی می‌شود

قوانین و استانداردهای گوگل در استفاده از سازنده و مخرب

  • کارهای سنگین را در سازنده انجام ندهید: متد سازنده فقط باید وظیفه مقداردهی اولیه متغیرها را بر عهده داشته باشد. از نوشتن منطق‌های پیچیده، اتصال به APIهای خارجی یا کوئری‌های سنگین دیتابیس درون __construct خودداری کنید.
  • عدم بازگرداندن مقدار (Return): متدهای سازنده و مخرب نباید هیچ مقداری را بازگردانند (Return کنند). خروجی آن‌ها نادیده گرفته می‌شود.
  • ترتیب اجرای مخرب‌ها: توجه داشته باشید که ترتیب نابودی اشیاء در پایان اسکریپت لزوماً تضمین‌شده نیست؛ بنابراین نباید به متغیرهای بیرونی در متد مخرب وابسته باشید.

پیشنمایش

پرسش و پاسخ

نظری یافت نشد

مطالب مشابه

آموزش طراحی و استایل‌دهی فرم‌ها با CSS: ایجاد فرم‌های کاربرپسند و واکنش‌گرا
1402/06/18 22:34

آموزش طراحی و استایل‌دهی فرم‌ها با CSS: ایجاد فرم‌های کاربرپسند و واکنش‌گرا

مطالعه بیشتر
تفاوت آرایه عددی، انجمنی و چندبعدی در PHP: راهنمای جامع و کاربردی
1405/03/24 01:07

تفاوت آرایه عددی، انجمنی و چندبعدی در PHP: راهنمای جامع و کاربردی

مطالعه بیشتر
آموزش جامع رمزنگاری پسورد با password_hash در PHP بر اساس استاندارد گوگل
1405/05/14 22:07

آموزش جامع رمزنگاری پسورد با password_hash در PHP بر اساس استاندارد گوگل

مطالعه بیشتر
تفاوت متد GET و POST در PHP؛ راهنمای جامع و استاندارد گوگل
1405/04/27 22:13

تفاوت متد GET و POST در PHP؛ راهنمای جامع و استاندارد گوگل

مطالعه بیشتر
آموزش ساخت Toggle Switch با CSS: طراحی دکمه‌های تغییر وضعیت جذاب و واکنش‌گرا
1403/08/16 22:20

آموزش ساخت Toggle Switch با CSS: طراحی دکمه‌های تغییر وضعیت جذاب و واکنش‌گرا

مطالعه بیشتر
پیمایش اشیاء و آرایه‌ها در جاوا اسکریپت: راهنمای کامل برای Object.keys، Object.values، for...in و for...of
1403/07/04 18:12

پیمایش اشیاء و آرایه‌ها در جاوا اسکریپت: راهنمای کامل برای Object.keys، Object.values، for...in و for...of

مطالعه بیشتر
مقایسه کامل و جامع MySQLi و PDO در PHP: کدام یک برای پروژه شما مناسب‌تر است؟
1405/05/04 23:45

مقایسه کامل و جامع MySQLi و PDO در PHP: کدام یک برای پروژه شما مناسب‌تر است؟

مطالعه بیشتر
معرفی Vue.js و ویژگی‌های کلیدی آن: فریمورک مدرن برای توسعه وب تعاملی
1402/06/28 00:33

معرفی Vue.js و ویژگی‌های کلیدی آن: فریمورک مدرن برای توسعه وب تعاملی

مطالعه بیشتر
آموزش Prepared Statement در PHP: امن‌سازی دیتابیس در برابر SQL Injection
1405/05/13 21:17

آموزش Prepared Statement در PHP: امن‌سازی دیتابیس در برابر SQL Injection

مطالعه بیشتر
آموزش HTML: اولین گام برای طراحی سایت و سئو حرفه‌ای
1402/05/18 00:00

آموزش HTML: اولین گام برای طراحی سایت و سئو حرفه‌ای

مطالعه بیشتر
آموزش توسعه بازی‌های ساده با استفاده از جاوا اسکریپت و Canvas API: راهنمای گام به گام
1403/08/05 21:06

آموزش توسعه بازی‌های ساده با استفاده از جاوا اسکریپت و Canvas API: راهنمای گام به گام

مطالعه بیشتر
آموزش CSS Transform و Transition: تبدیل‌ها و ایجاد تغییرات ظاهری پویا
1402/06/10 18:32

آموزش CSS Transform و Transition: تبدیل‌ها و ایجاد تغییرات ظاهری پویا

مطالعه بیشتر

تمامی حقوق معتلق به ناشر سایت است و کپی از آن پیگرد قانونی دارد