در مطلب شی گرایی در پی اچ پی – نوشتن کلاس پیشین آموزش دادیم که می توانیم بوسیله نمونه یا شی از کلاس، به ویژگی ها و متدهای عمومی (Public) آن دسترسی داشته و همچنین می توانیم به صورت سر راست یا بوسیله متدهای ویژه ای، ویژگی های یک کلاس را مقدار دهی کنیم. در این مطلب می خواهیم مورد دیگری در شی گرایی، به نام تابع یا متد سازنده (Constructor Function) را آموزش دهیم که از آن می توانیم برای مقدار دهی ویژگی های کلاس و همچنین در صورت نیاز، انجام برخی از پردازش ها و کارها روی آنها کمک بگیریم.

در زبان هایی مانند سی پلاس پلاس، سی شارپ و جاوا، تابع سازنده، متدی است همنام با نام کلاس که می تواند هیچ آرگومان ورودی یا چندین آرگومان ورودی را دریافت کند. در پی اچ پی تابع سازنده همنام با کلاس نیست، بلکه تابع سازنده در آن به نام construct__ است و همانطور که می بنید آغاز آن دو زیر خط (Under Line) نوشته می شود. شکل زیر همان کلاس Book را نشان می دهد که چهار کلاس مطلب شی گرایی در پی اچ پی – نوشتن کلاس را ندارد و به جای آن، تابع سازنده ای را به کار برده ایم که درون آن ویژگی های کلاس مقدار دهی آغازین شده اند. به عبارت دیگر اگر در زمان ساخت نمونه (شی) از کلاس، ویژگی ها را مقداردهی آغازین نکنیم، پس همین مقدارها برای ویژگی ها در نظر گرفته می شوند ولی در کنار این، می توانیم مقدارهای دلخواه را بازهم بوسیله دسترسی به ویژگی ها، تعیین کنیم.

درشکل زیر چون تابع سازنده درون خودش، ویژگی ها را مقدار دهی آغازین (پیش فرض) می کند، پس برابر با نمونه (یا شی) book1 نیازی به مقداردهی دستی ویژگی ها نیست. در گونه دوم، همچنان می توانیم ویژگی ها را همانند مطلب پیشین، به صورت دستی مقدار دهی کنیم. در شکل زیر مقدارهای متفاوتی را برای ویژگی ها در دو نمونه book1 و book2 تعیین کردیم و می توانید این تفاوت در مقدارها را در شکل خروجی بینید.

در شکل زیر به جای آنکه درون تابع سازنده به صورت دستی ویژگی ها را مقداردهی آغازین و پیش فرض کنیم، آرگومان هایی را به ازای هر ویژگی نوشته ایم که مقدار آنها به درون هر کدام از ویژگی های کلاس ریخته می شود. توجه کنید در این نمونه دیگر آشکارا گونه هر آرگومان را مشخص نکرده ایم تا نشان دهیم در پی اچ پی چنین موردی ضروری نیست.

در شکل زیر نیز می بینید که برای ایجاد یک نمونه (شی) از کلاس، باید به ترتیب مقدارهای لازم را به عنوان ورودی به نام کلاس بفرستیم. توجه کنید زمانی که شما یک نمونه از کلاس را ایجاد می کنید، خود به خود، تابع سازنده آن فراخوانی می شود. پس با فرستادن مقدارها در شکل زیر در غالب نام کلاس، خود به خود تابع سازنده فراخوانی شده و سپس مقدارها به ویژگی های مورد نظر ریخته می شوند. البته نباید این گونه گمان کنید که تابع سازنده تنها برای مقداردهی ویژگی های کلاس است، بلکه بر اساس نیاز شما، می توانید هر گونه دیگری کد نویسی کنید.

متد ()destruct__

کاربرد مخرب (Destruct) متد، وارون کاربرد متد ()construct__ است. متد ()construct__ به طور خودکار در زمان ایجاد نمونه (شی) از کلاس ایجاد می شود ولی متد ()destruct__ زمانی که نمونه یا شی کلاس از میان می رود، به صورت خودکار فراخوانی خواهد شد. در شکل زیر نمونه ساده از کاربرد این دو متد را نشان می دهیم. درون تابع سازنده، دو ویژگی کلاس SampleClass با تابع ()time و دیگری با تابع ()fopen (محتوای یک فایل) مقدار دهی پیش فرض می شوند. در برابر آن، در متد مخرب، بوسیله تابع ()fclode، توصیف کننده (File Descriptor) به فایل باز شده بسته خواهد شد.

متدهای جادویی

پی اچ پی شامل ۱۵ متد ویژه است که متد جادویی (Magic Method) نامیده می شوند و این متدها همگی دارای دو زیر خط (Under Line) در آغازشان هستند. بنابراین دو متد ()construct__ و ()deconstruct__ دو متد جادویی هستند. توجه کنید درون کلاس هیچ تابعی (متدی) نمی تواند همنام با متدهای جادویی باشد. متدهای جادویی در بروز یک رویدا، به صورت خودکار فراخوانی می شوند. نمونه آن متد ()construct__ که در زمان ایجاد یک نمونه از کلاس، به صورت خودکار فراخوانی می شود.