در مطلب های پیشین آرایه ها، متد های GET (و آرایه سراسری GET_$ برای دریافت داده از URL) و POST (و آرایه سراسری POST_$ برای دریافت داده از فرم های اچ تی ام ال)، آرایه سراسری SERVER_$ و کوکی ها را آموزش داده ایم و شما تا اندازه ای با مفاهیم برنامه نویسی پی اچ پی آشنا شده اید. در این مطلب و چندین مطلب پیش رو به شی گرایی (Object Oriented) در پی اچ پی خواهیم پرداخت و سپس چگونگی ارتباط به پایگاه داده بوسیله PDO را آموزش داده و در ادامه برای یادگیری بهتر، چندین پروژه ساده برای تعامل با پایگاه داده را آموزش می دهیم.

مفهوم کلاس و تعریف آن در پی اچ پی

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

کلاس (Class) بلوک هایی از کدها ها هستند که شامل ویژگی ها (Property) و متدها – تابع ها (Method) هستند که در کنار یکدیگر یک شی (Object) از برنامه را تعریف وتوصیف می کنند. در واقع Property های کلاس همان ویژگی های یک شی واقعی و Method ها همان رفتار یک شی واقعی هستند. در برنامه نویسی شی گرایی (Object Oriented Programming) یک شی (Object) یک نمونه (Instance) از یک کلاس درون برنامه است.

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

مفهوم ایجاد نمونه از کلاس (Instantiate)، به این مفهوم است که شما می توانید به اعضای آن کلاس (Class Member) دسترسی داشته باشید. به طور نمونه می توانید به ویژگی های کلاس دسترسی و سپس آنها را مقدار دهی کنید. در ادامه مطلب ها بیشتر در مورد چگونگی ایجاد اعضای کلاس صحبت کرده ایم.

در شکل زیر یک کلاس ساده به نام Book ایجاد شده است که دارای  ویژگی و دو متد به نام های ()printBookInfo و ()getCopy است. همانطور که می بینید متدهای یک کلاس همان ساختار تعریف تابع ها را دارند. در نوشتن کلاس ها زمانی که پیش از اعضای کلاس، واژه کلیدی public قرار گیرد، پس آن عضو به صورت عمومی خواهد بود به این معنی که خارج از کلاس و بوسیله نمونه آن کلاس قابل دسترسی است.

هر ویژگی یا Property کلاس به صورت یک متغیر ساده است که یک ویژگی از کلاس را در خود نگه می دارد. به طور نمونه یک کتاب دارای ویژگی های متفاوت مانند، شماره isbn،عنوان کتاب، تعداد برگ های کتاب، نام نویسنده، وزن کتاب، ناشر کتاب، زمان چاپ کتاب، شماره چاپ و تعداد چاپ، در دسترس بودن در انبار و یا هر ویزگی دیگری می شود که این ویژگی ها باید به صورت متغیرهایی نگهداری شوند. در کلاس Book بالا تمامی ویژگی ها به صورت public تعریف شده اند، پس از بیرون کلاس و بوسیله نمونه ای از کلاس قابل دسترسی هستند.

کلاس دارای دو متد است که هر دو به صورت public تعریف شده اند، پس می توان بیرون کلاس به آنها و بوسیله نمونه ای از کلاس دسترسی داشته باشیم. در متد ()printBookInfo نخست بوسیله متغیر this$ به هر کدام از ویژگی های public دسترسی پیدا می کنیم. همانطور که می بینید خود this$ یک متغیر است، زیرا در آغاز آن یک $ آمده است. همچنین برای دسترسی به ویژگی ها یا متغیرهای کلاس بوسیله متغیر this$ باید الگوی this->variable_class$ را به کار ببرید. به عبارت دیگر پس از عملگر <- باید نام متغیر کلاس بیاد ولی نباید در آغاز آن کاراکتر $ قرار گیرد. در کدهای زیر نمونه های متفاوتی از متغیر this$ آورده شده است و همانطور که می بینید می توانیم بوسیله آن به متدهای کلاس نیز دسترسی داشته باشیم.

ایجاد نمونه یا شی از کلاس

در شکل زیر و بوسیله عملگر new یک نمونه یا شی (Object) از کلاس Book ایجاد شده که در غالب متغیر book$ قابل دسترسی است. پس از ایجاد نمونه بوسیله عملگر new می توانیم به عضوهای عمومی آن دسترسی داشته باشیم. در شکل زیر به چهار ویزگی کلاس بوسیله نام شی (در اینجا متغیر book$) دسترسی و آنها را مقدار دهی کرده ایم. سپس نخست متد ()printBookInfo را فرخوانی کرده ایم که رشته نخست در خروجی زیر را نشان می دهد. سپس متد ()getCopy را درون شرط if فراخوانی کرده ایم. اگر مقدار ویژگی available$ متغیر book$ یکی یا بیشتر از یک باشد، پس کتاب با عنوان ویژگی title$ در انبار هست ولی اگر کمتر از یکی باشد (یعنی هیچ) پس قابل خریداری نیست. کد زیر ساده ترین الگوی ایجاد نمونه یا شی کلاس را نشان می دهد.

در شکل زیر که بازنویسی شده همان کلاس بالا است، چهار متد نوشته ایم که هر کدام یک آرگومان را دریافت می کنند. متد ()setIsbn آرگومانی از گونه int دریافت و سپس آنرا به ویژگی isbn$ از کلاس انتساب می دهد. باز هم توجه کنید که بوسیله متغیر this$ درون متدها به ویژگی ها و متغیرهای کلاس دسترسی پیدا کرده ایم. به عبارت دیگر برای دسترسی به هر عضو کلاس، درون خود کلاس باید متغیر this$ را به کار ببریم. همچنین توجه کنید که گونه آرگومان ها را آشکارا مشخص کرده ایم ولی برابر با ویژگی های پی اچ پی، همچنان اجباری به این کار نیست و اگر شما آرگومان های یک تابع یا متد یک کلاس را بدون گونه نیز مشخص کنید، هیچ مشکلی پیش نمی آید.

چهار متد بالا برای دریافت مقدار برای چهار پارامتر کلاس Book نوشته شده اند و در شکل زیر می بنید که به جای دسترسی سر راست به هر ویژگی بوسیله شی (نمونه) کلاس و مقدار دهی آن، این بار متدها را فراخوانی کرده و از این رو ویژگی ها با ورودی متدها، مقدار دهی می شوند. شکل زیر چگونگی ایجاد نمونه تازه ای از کلاس و فراخوانی متدها را نشان می دهد. توجه کنید که عدد صفر به متد ()setAvailable فرستاده شده است، پس مقدار ویژگی available$ برابر با صفر خواهد بود و از این رو در شکل خروجی می بینید که Not Available نشان داده شده است.

در مطلب پیش رو تابع سازنده (Constructor Function) را آموزش می دهیم که شیوه کارآمد تری برای دریافت مقدار برای هر کدام از ویژگی های کلاس است. همچنین در مطلب پیش رو مفهوم دیگری به نام Overloading را آموزش می دهیم که در برنامه نویسی شی گرا بسیار مفید و کاربردی است.