من با توجه به اینکه منبع های آموزش PHP به صورت پیشرفته، البته فارسی کم است، تصمیم گرفتم که یکی پیشرفته ترین مباحث PHP یعنی شیء گرایی را آمورش دهم. از شما و مدیر فاروم هم انتظار همکاری دارم. این جلسه فقط تئوری است و در جلسه ی بعد به کار عملی می پردازیم.
کلاسها (Classes)
یک کلاس تعریف یا نمای یک نوع خاص داده است و کلاسها به عنوان روشی برای حالت دادن به تمام انواع متفاوت اشیاء و سیستم شما عمل میکنند . هنگامی که میخواهیم یک شیء جدید را تعریف کنیم ، ابتدا از کلمه کلیدی class برای تعریف آن ، پیش از استفاده از آن در اسکریپتهای PHP خود استفاده میکنیم . تفاوت واضح یک کلاس و یک شیء این است که کلاسها اشیایی را تعریف میکنند که در برنامههایمان به کار میبریم . پیش از آن که درباره روش ساخت یک کلاس صحبت کنیم ، میخواهیم شروع به تأمل کنید که یک کلاس نمایشی از یک ایده است . مهم است که هنگامی که کلاسهای خودتان را طراحی میکنید . آنها یک هدف را دنبال کنند و تمامی رفتاری را که از آن ایده انتظار میرفت را فراهم کنند .
یک کلاس در PHP حاوی سه کامپوننت اصلی است : members (اعضاء) که به آنها به عنوان داده یا صفت اشاره میشود) متدها ، و Consructor یک عضو members تکهای از داده است که شیء در بر دارد . اشیاء میتوانند هر تعداد عضو داشته باشند . برای مثال ، اگر قرار باشد اتومبیل را با استفاده از یک کلاس طراحی کنیم ، یک چرخ در حال دوران یا گیربکس باید به عنوان یک عضو از ماشین تعریف شوند .
متدها سرویسهایی هستند که شیء برای سرویس گیرندههایش فراهم میکند که از اعضا داخلی آن استفاده میکنند و آنها را دستکاری میکنند . برای مثال ، اگر قرار باشد اتومبیل را با استفاده از یک کلاس طراحی کنیم ، یک چرخ در حال دوران یا گیربکس باید به عنوان یک عضو از ماشین تعریف شوند .
متدها سرویسهایی هستند که شیء برای سرویس گیرندههایش فراهم میکند که از اعضا داخلی آن استفاده میکنند و آنها را دستکاری میکنند . برای مثال ، یک کلاس car میتواند یک متد را برای روشن کردن وسیله نقله و استفاده از چرخ در حال دوران در داخل آن فراهم کند .
یک Constructor متد خاصی است که شیء را درون وضعیت آماده آن معرفی می:ند . تنها یک Constructor برای یک شیء در PHP میتواند موجود باشد . در یک کلاس car ، افزودن بدنه ، موتور ، لاستیکها ، گیربکس ، صندلی و غیره بر روی car با هم متفاوتند . هنگامی که سرویس گیرندهها میخواهند از متدهای روی یک شیء استفاده کنند ، Constructor اطمینان میدهد که هر متد عملیات را با موفقیت به انجام خواهد رساند و نتیجه مورد انتظار را برخواهد گرداند . برای مثال ، برای روشن کردن رادیو درون اتومبیل شما ، باید یک رادیو نصب شده باشد . در این نمونه ، Constructor مسئول اطمینان بخشیدن از این موضوع است که رادیو پیش از استفاده نصب شده است.
به غیر از مقدار دهی شیء به یک وضعیت آماده معتبر ، تفاوت اساسی دیگر این است که یک Constructor هیچ مقدار برگشتی صریحی ندارد . تمامی Constructor ها یک متغیر جدیداً اختصاص یافته را برای استفاده در برنامه شما بر میگردانند .
در نتیجه ، برگرداندن یک مقدار در Constructor کلاس ، غیرقانونی است . درباره استفاده از اشیاء در برنامههای شما ، در بخش بعدی بیشتر صحبت خواهیم کرد . اطمینان یافتن از طراحی مناسب اشیاء و Constructor های آنها ، مسئلهای است که توسعه دهندگان زیادی اغلب با آن روبرو میشوند . هنگامی که کلاس برنامهنویسان را وادار میکند که اعضای شیء را پیش از استفاده از متدهای خود تنظیم کنند یا هنگامی که کلاس برنامهنویس را وادار میکند تا از ترتیب خاصی ، هنگام فراخوانی متدهای شیء پیروی کند ، کد گیج کننده و مبهمی را ایجاد میکند . از OPP به این منظور استفاده میکنیم که به طور کلی از بروز چنین مسئلهای جلوگیری کنیم . اگر کلاس مهندسی شده است تا از Constructor های خود برای معرفی بخشهای کلیدی کلاس استفاده نکند ، اشکال از طراحی ضعیف ناشی میگردد . دوباره در همان تله گرفتار نشوید .
کلاسی که خوب طراحی شده باشد برنامهنویسی ، اشکالزدایی و نگهداری زیادی را حذف میکند.
بیایید نگاهی به دستور زبان کلی برای Class در PHP بیندازیم ، که استفاده از این سه نوع کامپوننت را نشان میدهد :
class ClassName [extends ParentclassName]
{
var $member1;
var $member2;
…
var $memberN;
// Constructor
function Class Name()
{
}
function method1()
{
}
…
function method2()
{
}
function methodN()
{
}
}