شی گرایی در php (تعریف کلاس ها و شی)

شی گرایی در php (تعریف کلاس ها و شی)

شی گرایی در php (تعریف کلاس ها و شی)

در گذشته قبل از اینکه مفهومم شی گرایی در php وارد بشه برنامه نویس ها مجبور بودن که php رو در کنار html استفاده کنن که این روش در پروژهای کوچیک مشکل بزرگی محسوب نمی شد اما زمانی که صحبت از ساخت برنامه های متوسط و بزرگ به میون می اومد کار یکم سخت میشد چون اینطور برنامه نویسی هر چقدر هم مدیریت شده باشه دارای کد نویسی اسپاگتی و کثیفیه که مدیریت و توسعه اش به نسبت زمانی که با استفاده از مفهوم شی گرایی در php برنامه نویسی میکنید خیلی دشوارتر میکنه .

یک مثال از php بطور معمولی :

php?>

 Connect to Database//

<?

<!DOCTYPE html>
<html>
<head>
<title>Document</title>
<head/>
<body>

<body/>
<html/>

شی گرایی در php یا به اختصار oop که کوتاه شده ای (Object-Oriented Programming) برنامه نویسی شی گرای به شما اجازه میده در کدهای خودتون تقسیم بندی های متفاوتی انجام بدید و کدهای php و html رو تا حد زیادی از هم جدا کنید و همین باعث میشه تا مدیریت روی کدهای php تون فوق العاده بالا بره . البته خیلی دلایل دیگه وجود داره که نمیخوام با این دلایل سرتون رو درد بیارم ، بزارید بریم سراغ توضیح مفهوم oop .

اصل برنامه نویسی oop سعی داره تا دنیایی واقعی رو براتون شبیه سازی کنه. یعنی هر چیزی که شما در دونیای اطرفاتون میبینید رو میتونید به این مفهوم ارتباط بدید و بسازید .

شما در نظر داشته باشید خونه ای میخواید درست کنید . قبل ساخت این خونه نیاز به نقشه ای برای ساخت اون خونه دارید . زمانی که نقشه رو آماده میکنید و از روی اون نقشه خونه ای رو میسازید ، بنظرتون اون نقشه کارش تموم میشه یا میشه از روش خونه های دیگه ای ساخت ؟ در برنامه نویسی oop هم دقیقا به همین صورت عمل میشه . شما میتونید از یک کد نوشته شده در جاهای دیگه به راحتی استفاده کنید و بدونه اینکه دوباره کل کد رو از اول بنویسید دقیقا برعکس کاری که در php بدونه استفاده از مفهوم oop به دفعات زیاد می تونید مشاهده کنید که تکرار کد ها چقدر میتونه زیاد باشه .

کلاس ها و شی ها

در شی گرایی در php دو مفهوم مهم ابتدایی و پایه وجود داره . کلاس ها و شی ها . یک کلاس (class) دقیقا مثل همون نقشه ای میمونه که باهاش خونه ای رو میشه ساخت ، نقشه ای که از کنار هم قرار دادن اجزایی متفاوتی ساخته میشه . این اجزا همون کلاس ها هستند مثل چی ؟ مثل کلاس در ، پنجره ، سیم و … . که هر کدوم دارای ویژگی های مخصوص بخودشون هستند . که با ترکیب اینها با هم یک خونه ساخته میشه .

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

دقت داشته باشید که تقریبا همه کلاس ها از هم جدا هستن و همین موضوع اونا رو سازمان یافته تر و استفاده از اونها رو ساده میکنه . خوب امیدوارم که با این دو مفهوم آشنا شده باشید . حالا اجازه بدید تا بصورت دقیق تری شما رو با ساختار کلاس ها در php آشنا کنم.

ساختار کلاس ها

در شی گرایی در php، یک کلاس با کلمه کلیدی (class) بوجود میاد و با یک اسپیس و تایپ یک اسم شما اسم اون کلاس رو تعریف میکنید و در نهایت با قرار دادن براکت های باز و بسته ( { } ) کار یک class رو شروع میکنید . دقیقا مثل مثال زیر :

php؟>

class MyClass
}
;// class propertys and methods go here
{

<?

بعد از به وجود آوردن کلاس ما با استفاده از کلمه کلیدی new می تونیم از اون کلاس استفاده کنیم و یک شی (object) با همون کلاس بسازیم . در زیر میتونید این روش رو ببینید :

;()obj = new MyClass$

شما با قرار دادن شی (obj$) در داخل var_dump میتونید محتوای کلاس رو مشاهده کنید .

(var_dump($obj

و اگر این کدها رو در داخل فایلی برای test کردن قرار بدید و فایل رو اجرا کنید نتیجه زیر رو مشاهده خواهید کرد .

{ } (object(MyClass)#1 (0

معرفی property ها

برای اضافه کردن اطلاعات در کلاس ها از property ها استفاده میشه . کار اونها دقیقا شبیه متغیرها در php معمولیه و تنها تفاوتشون اینکه قبل از تایپ اسم property از کلمات کلیدی private , protected و public استفاده میشه ، این کلمات کلیدی رو در کپسوله سازی (پنهان سازی) بطور کامل توضیح داده میشه فقط فعلا در همین حد بدونید که این کلمات باید برای تعریف property ها و method ها قبل از اسم اونها قرار بگیرن .

به مثال زیر دقت کنید .

php؟>

class MyClass
}
;’public $name = ‘john doe
{

;obj = new MyClass$

;(var_dump($obj

<?

در بالا با استفاده از کلمه public تعیین کردیم که property مون برای استفاده در یک object قابل مشاهدست و همینطور property به اسم name$ تعریف و بعد اون رو مقدار دهی کردیم و بعد با تعریف یک شی و قرار دادن اون در var_dump اطلاعات کامل رو برگشت دادیم .

شما به راحتی میتونید بعد از تعریف شی دوباره property رو مقداردهی کنید البته تنها در حالتی که اون property از نوع public باشه و همینطور به راحتی میتونید اون رو با استفاده از echo چاپ کنید . البته برای چاپ یا مقداردهی دوباره ، نیاز به دسترسی به اون property از طریق object دارید برای اینکار بعد از تایپ اسم object با قرار دادن یک فلش ( <- ) و تایپ اسم property میتونید به اون دسترسی داشته باشید . به مثال زیر دقت کنید

php?>

class MyClass
}
;’public $name = ‘John Doe
{

;obj = new MyClass$

;'<echo $obj->name . ‘</br

;’obj->name = ‘Hesam Mousavi$

;echo $obj->name

<?

بعد از اجرای فایل test.php میتونید نتیجه زیر رو مشاهده کنید .

John Doe
Hesam Mousavi

معرفی method ها

method ها دقیقا کار توابع رو در کلاس ها در مبحث شی گرایی در php انجام میدن یعنی تفاوتی چندانی با هم ندارن method ها هم با قرار گرفتن کلمه کلیدی private , protected و public قبل از function تعریف میشن . یک method میتونه به شی ها کمک کنه که در داخل کلاس ها عملیاتی رو انجام بدن البته این عملیات توسط متدها مشخص میشه . برای مثال متدهای برای set و get کردن اطلاعات property داخل کلاس می نویسیم . به کد زیر دقت کنید :

php?>

class MyClass
}
;’public $name = ‘John Doe

(public function setProperty($newval
}
;this->name = $newval$
{

()public function getProperty
}
;”<return $this->name . “</br
{

{

;obj = new MyClass$

;echo $obj->name

<?

نکته : در کد بالا ما در دو جا از this$ استفاده کردیم و بعد با یک فلش و قرار دادن اسم property بهش دسترسی پیدا کردیم . در اصل این طریقه دسترسی به property ها و method ها در داخل یک method است . چون بطور معمولی شما نمی تونید با تایپ فقط اسم property یا method بهش دسترسی داشته باشید تنها زمانی که از this$ و با روش بالا عمل کنید میتونید به یک property و method از یک کلاس داخل یک method دسترسی پیدا کنید .

در کد بالا فقط با قرار دادن obj->name$ ، مقدار این property رو چاپ کردم اما در مثال زیر من ابتدا من با استفاده از متد getProperty میام مقدار فعلی name$ رو چاپ میکنم و بعد در مرحله بعدی با استفاده از متد setProperty و ارسال یک مقدار به عنوان آرگومان میام یک مقدار جدید برای name$ تعیین میکنم و بعد دوباره با چاپ کردن متد getProperty میام مقدار فعلیش رو چاپ می کنیم . این یک روش مهم برای set و get کردن property هاست که به زودی در قسمت بعد دلیلش رو هم میفهمید ولی فعلا از دید امتحان کردن یک متد بهش نگاه کنید .

php؟>

class MyClass
}
;”public $name = “John Doe

(public function setProperty($newval
}
;this->name = $newval$
{

public function getProperty
}
;”</return $this->name . “<br
{
{

;obj = new MyClass$

echo $obj->getProperty(); // Get the property value

$obj->setProperty(“Hesam Mousavi”); // Set a new one

echo $obj->getProperty(); // Read it out again to show the change

<?

نتیجه زیر حاصل از اجرای کد بالاست

John Doe
Hesam Mousavi

[ قدرت oop زمانی اشکار میشه که ما چند شی از یک کلاس می سازیم ]

شما با استفاده از oop می تونید از یک قطعه کد بارها و بارها در قالب اشیاء مختلف استفاده کیند .

بازدید: 87

درباره نویسنده

مطالب مرتبط

نظر بدهید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *