آشنایی با مفاهیم Constructor و Destructor در PHP

آشنایی با مفاهیم Constructor و Destructor در PHP

اگر جزو آن دسته از دولوپرهایی هستید که با زبان برنامه‌نویسی PHP آشنا نیستید، توصیه می‌کنیم که از خواندن این آموزش صرف نظر کنید چرا که درک موضوعات مطرح شده نیازمند آشنایی با مفاهیم ابتدایی شیئ‌گرایی در زبان برنامه‌نویسی PHP می‌باشد.

به طور کلی، منظور از Constructor نوع خاصی از متدها است که برای ارتباط با دیتابیس، تنظیم کوکی‌ها و یا اختصاص مقدار اولیه به متغیرها و کارهایی از این دست کاربرد دارد که در زبان پی‌اچ‌پی از سه خصیصه‌ای برخوردارند که متدهای معمولی عاری از آن‌ها هستند که عبارتند از:

- نام این متد همیشه به صورت ثابت ()construct__ است (توجه داشته باشیم که معنی لغوی Construct در زبان فارسی «ساختن» می‌باشد.)
- این متد به صورت خودکار و به محض اینکه یک شیئ از روی کلاسی که این متد داخلش تعریف شده بسازیم، به اصطلاح Call می‌شود.
- داخل این نوع متدها به هیچ وجه نمی‌توان از دستور return استفاده کرد.

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

در مقابل Constructor، مفهوم دیگری داریم تحت عنوان Destroctor. گفتیم کانستراکتور زمانی فراخوانی می‌شود که یک شیئ از روی کلاسی ساخته می‌شود؛ اما در مقابل، دیستراکتور زمانی فراخوانی می‌شود که یک آبجکت یا بهتر بگوییم یک شیئ از بین می‌رود و از جمله مواقعی که یک شیئ ساخته شده از روی کلاسی از بین می‌رود (یا اصطلاحاً Destroy می‌شود) می‌توان به زمانی اشاره کرد که اسکریپت ما به اِتمام رسیده که بالتبع بخشی از حافظهٔ اِشغال‌شده توسط آن اسکریپت نیز آزاد می‌شود (همچنین زمانی که از متدی تحت عنوان ()unset استفاده می‌کنیم، آبجکت ساخته‌شده از بین خواهد رفت.) برای ساخت متد دیستراکتور نیز همواره باید آن را به صورت ()destruct__ بنویسیم و نکته‌ای که همواره در مورد دیستراکتورها باید مد نظر قرار دهیم این است که این گروه از متدها، بر خلاف کانستراکتورها و سایر متدها، به هیچ وجه نمی‌توانند پارامتر ورودی دریافت کنند.

حال که با مفاهیم تئوریک کانستراکتور و دیستراکتور آشنا شدیم، قصد داریم تا به صورت عملی این دو متد را ایجاد کنیم. برای این منظور، فایلی ایجاد می‌کنیم تحت عنوان Dummy.php و داخل آن نیز کلاسی تحت عنوان Dummy ایجاد کرده سپس داخل این کلاس اقدام به نوشتن متدهای کانستراکتور و دیستراکتور می‌کنیم:

class Dummy
{
    function __construct() 
    {
        echo 'Constructor Called.';
    }

    function __destruct() 
    {
        echo 'Destructor Called.';
    }
}

همان‌طور که در کد فوق ملاحظه می‌شود، با استفاده از کلیدواژهٔ class کلاسی تحت عنوان Dummy ایجاد کرده‌ایم (لازم به ذکر است که واژهٔ انگلیسی Dummy به معنی «کودن» است.) سپس داخل این کلاس متدی تحت عنوان ()construct__ ایجاد کرده‌ایم به این شکل که کلیدواژهٔ function که الزامی است را نوشته سپس دو علامت _ پشت سر هم قرار داده (که این علائم هم الزامی می‌باشند) و کلیدواژهٔ construct را نوشته‌ایم. داخل این متد صرفاً از یک دستور echo استفاده کرده‌ایم که قرار است عبارت Constructor Called به معنی «کانستراکتور فرا خوانده شد» را چاپ کند. خارج از کروشه‌های مرتبط با متد کانستراکتور، به همین صورت متد دیگری تحت عنوان ()destruct__ ایجاد کرده‌ایم با این تفاوت که این متد وظیفه دارد تا وقتی که فراخوانی شد، عبارت Destructor Called به معنی «دیستراکتور فراخوانده شد» را در معرض دید کاربر قرار دهد. در این مرحله از کار، کدنویسی ما به پایان می‌رسد و صرفاً نیاز است تا یک آبجکت از روی کلاس Dummy ایجاد کنیم:

$object = new Dummy();
unset($object);

همان‌طور که در کد فوق ملاحظه می شود، برای ساخت یک آبجکت جدید از روی کلاس مد نظر، ابتدا نامی برای آن انتخاب می‌کنیم که در این مثال نام object$ در نظر گرفته شده است و مقدار آن را برابر با کلیدواژهٔ new سپس نام کلاس مد نظر که در اینجا Dummy است قرار می‌دهیم. برای از بین بردن یک آبجکت ساخته‌شده هم می‌توان از متد از پیش تعریف شدهٔ ()unset خودِ زبان پی‌اچ‌پی استفاده نمود. اکنون می‌توانیم فایل خود را در مرورگر اجرا کنیم (پیش از اجرا دو نکته را مد نظر داشته باشید؛ اول اینکه آبجکت ساخته‌شده باید خارج از کروشه‌های مرتبط با کلاس Dummy باشد و دوم اینکه پیش از اجرای فایل در مرورگر، باید از نرم‌افزاری همچون XAMPP برای ایجاد یک سرور مجازی استفاده کنید.)

Constructor Called.
Destructor Called.

در تفسیر خروجی بالا بایستی گفت که به محض ساخت یک آبجکت جدید از روی کلاس Dummy، به صورت خودکار متد کانستراکتور این کلاس اجرا می‌شود به همین دلیل می‌بینیم که در خط اول عبارت داخل این متد به نمایش درآمده است و به محض از بین بردن یک آبجکت با بهتر بگوییم Destroy کردن آن هم بلافاصله متد دیستراکتور فراخوانده می‌شود که خروجی آن هم به نمایش درآمده است (چنانچه علاقمند به فراگیری گام به گام زبان برنامه‌نویسی PHP هستید، می‌توانید به دورهٔ آموزش PHP در سکان آکادمی مراجعه نمایید.)



بهزاد مرادی