برای شروع مباحث شی گرایی من مقدماتی را مطرح می کنم که امیدوارم زیاد تکراری و کلیشه ای نباشند.
ببینید دوستان همونطور که در پست های قبلی خودم گفتم دنیای ما دنیای شی گرایی هست. در همه آموزش های مباحث شی گرایی یا ماشین رو یا انسان یا... را مثال می زنند، بذارید یک شی را تعریف کنیم:
موجودیتی که از خودش رفتار و دارای خصوصیات باشد.
مثلا یک انسان
خصوصیات: رنگ پوست، قد، جوان بودن یا پیر بودن یا....
رفتار: دویدن، حرف زدن و...
خوب همین را بیاید در قالب یک شی به PHP معرفی کینم، من همیشه رفتار ها را متد یا function و خصوصیات را Properties در یک کلاس در نظر می گیرم.
پس شی یا موجودیت انسان در تعریف اینطور میشه:
class Human{
private skinColor;
public function tell(){
echo ‘Salam’;
}
}
خوب همینطور که می بینیم این کلاس به عنوان یک شی یا موجودیت در php تعریف گردید. کلمه class به عنوان یک تفکیک کننده یا دسته بندی استفاده میشود.
حالا اگر روزی انسانی به دنیا بیاد که رنگ پوستش آبی باشه آیا می تونیم این انسان را جزو گروه انسان ها قرار دهیم یا نه؟ مطمئنا جواب بله هست.
اما اگر روزی انسانی به دنیا بیاد که مثلا بال داشته باشه حالا چی؟ بذاریم تو گروه انسان ها یا خیر؟ جواب خیر هست، ما میایم یک گروه ایجاد می کینم به اسم گروه انسان های بال دار و این انسان را در این گروه قرار می دهیم تا یک هم گروهی براش پیدا کنیم.
پس فاکتور ما برای گروه بندی کمیت هست نه کیفیت!!!!!!!
خوب ما عمل دسته بندی را انجام دادیم، همینطور که می دونیم ما انسان های متفاوت در مکان های متفاوت داریم، که میشه همون مبحث namespace که قبلا توضیحش دادم.
نوبت به این میرسه که دسترسی ها و انواع کلاس ها را بررسی کنیم، در این مثال می تونم بگم 80% علم شی گرایی وجود داره.
namespace PHP {
abstract class Programmer
{
final public static function work()
{
}
}
}
چطور من دارم میگم که 80% علم شی گرایی همین الان در همین 2 خط برنامه نویسی هست؟
به این دلیل که مفهموم namespace را داریم کلاس معمولی یا abstract را داریم، انواع حالات و دسترسی های یک function را هم داریم.
آیا نیازی به توضیح کلمات بالا هست؟
مطمئنا همه با این مفاهیم آشنا هستیم.
قوانین دیگری که شما باید در yii رعایت کنید یادگرفتم capitial یا camel case نوشتن اسامی متد ها و متغیر ها و ... می باشد.
یادتون باشه دوستان در yii به دلیل اینکه php 5.0 از مفهموم namespace پشتیبانی نمی کند برای اینکه کلاس ها با همدیگر کانفلیکت نامی نداشته باشند از حرف C برای شروع نام گزاری تمامی کلاس های خود استفاده می کند.
پس یادتون باشه شما ترجیحا این کار را نکنید.
برای نام گزاری کلاس ها از استاندارد captial استفاده کنید و نام های کلاس ها را با حرف بزرگ شروع کنید مثلا:
class Barnamenevis{
}
class BarnamenevisPhp{
}
برای نام گزاری متد ها و متغیر ها از استاندارد camelcase استفاده کنید مثلا:
$helloWorld=10;
function getStudentName(){
}
Properties های private کلاس را با Underline شروع کنید مثلا:
class BarnamenevisPhp{
private $_name;
}
البته دوستان رعایت کردین این موارد اجباری نیست اما اگر کسی از این استاندارد ها در کد نویسی استفاده کنه کد اون شخص خوانا تر و حرفه ای تر می باشد.
البته بسیاری قوانین دیگر هم و جود دارند که انشا الله دوستمون در ترجمه برای شما بازگو خواهند کرد.
سوالی که من از دوستان دارم و می خوام که به اون فکر کنند اینه که آیا در جهان واقعی ما کلاس انسان را ایجاد کردیم یا کلاسی وجود داشته و ما خواه یا ناخواه وارد اون کلاس شدیم؟