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

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

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

به طور کلی، منظور از Constructor در زبان برنامه‌نویسی PHP نوع خاصی از متدها است که برای ارتباط با دیتابیس، تنظیم کوکی‌ها و یا اختصاص مقدار اولیه به متغیرها کاربرد دارد که از ۳ خصیصه‌ای برخوردارند که متدهای معمولی عاری از آن‌ها هستند که عبارتند از:
۱- نام این متد همیشه به صورت ثابت ()construct__ است (توجه داشته باشیم که معنی لغوی Construct در زبان فارسی «ساختن» می‌باشد.)

۲- این متد به صورت خودکار به محض اینکه یک شیئ از روی کلاسی که این متد داخلش تعریف شده بسازیم فراخوانی شده یا بهتر بگوییم Call می‌شود.

۳- داخل این نوع متدها به هیچ وجه نمی‌توان از دستور return استفاده کرد.

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

در مقابل Constructor مفهوم دیگری داریم تحت عنوان Destroctor. گفتیم کانستراکتور زمانی فراخوانی می‌شود که یک شیئ از روی کلاسی ساخته می‌شود؛ در مقابل، دیستراکتور زمانی فراخوانی می‌شود که یک آبجکت یا بهتر بگوییم یک شیئ از بین می‌رود. از جمله مواقعی که یک شیئ ساخته شده از روی کلاسی از بین می‌رود یا اصطلاحاً Destroy می‌شود می‌توان به زمانی اشاره کرد که اسکریپت PHP ما به اتمام رسیده که بالتبع بخشی از حافظه آشغال شده توسط آن اسکریپت نیز آزاد می‌شود (همچنین زمانی که از متدی تحت عنوان 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 به معنی «دیستراکتور فراخوانده شد» را در معرض دید کاربر قرار دهد.

در این مرحله از کار، کدنویسی ما به پایان می‌رسد و صرفاً نیاز است تا یک آبجکت از روی کلاس Dummp ایجاد کنیم:

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

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

اکنون می‌توانیم فایل خود را در مرورگر اجرا کنیم (پیش از اجرا ۲ نکته را مد نظر داشته باشیم: اول این که آبجکت ساخته شده می‌بایست خارج از کروشه‌های مرتبط با کلاس Dummy باشد و دوم این که پیش از اجرای فایل در مرورگر، می‌بایست از نرم‌افزاری همچون XAMPP برای ایجاد یک سرور مجازی استفاده کنید.)

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

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

حال نوبت به نظرات شما می‌رسد. در تجربیات کدنویسی خود بیشتر در چه جاهایی از کانستراکتور و دیستراکتور استفاده کرده‌اید؟ نظرات، دیدگاه‌ها و تجربیات خود را با ما و سایر کاربران سکان آکادمی به اشتراک بگذارید.