
تعریف کلاس در PHP و استفاده از آنها در برنامه نویسی شی گرا بسیار کاربردی است. اگر بخواهیم به صورت شئ گرا کار کنیم، بعد از درک مفاهیم اولیه، باید بتوانیم با کلاسها کار کنیم. در این آموزش با نحوه ساخت کلاس و کار با متدها و ویژگیها در زبان PHP آشنا شده و نکات جانبی آن را یاد میگیریم.
از مفاهیم برنامه نویسی شی گرا میدانیم که کلاسها شبیه یک قالب برای اشیاء هستند. به یک نمونه از یک کلاس (Class)، شئ (Object) گفته میشود.
هر کلاس میتواند چندین ویژگی داشته باشد. این ویژگیها همان خصوصیات کلاس هستند که برای هر شئ میتواند متفاوت باشد. همچنین برای تعریف کارهایی که یک شئ میتواند انجام دهد، از متدها استفاده میکنیم.
با این مقدمه خیلی کلی، ابتدا یک مثال از کلاس ماشین در نظر میگیریم و آموزش را بر مبنای آن جلو میبریم.
فهرست محتوای آموزش
ساخت کلاس در PHP
فرض کنید کلاسی به نام Car داریم. این کلاس نشاندهنده انواع ماشین در سیستم ما است. برای هر ماشین، ۳ ویژگی ساده در نظر میگیریم:
- مدل (model)
- رنگ (color)
- ظرفیت (capacity)
علاوه بر اینها، متدهایی برای ماشین در نظر میگیریم. که جلوتر آنها را معرفی و تعریف میکنم.
ساختار کلی تعریف کلاس در PHP به این صورت است که ابتدا کلمه کلیدی Class را نوشته و جلوی آن نام کلاس را مینویسیم. سپس با گذاشتن علامت کروشه ({}
) محدوده کلاس را مشخص میکنیم.
هر چیزی که درون این محدوده بنویسیم، جزء کلاس در نظر گرفته میشود.
class Name {
// class body
}
پس برای تعریف کلاس ماشین در PHP باید ساختار زیر را استفاده کنیم:
<?php
class Car {
// Car class body
}
?>
توجه کنید که حرف اول نام کلاس با حروف بزرگ انگلیسی نوشته میشود.
ویژگی کلاس در PHP
تعریف ویژگیهای یک کلاس (property) معمولاً در ابتدای بدنه کلاس انجام میشود. ویژگیها در حقیقت نوعی متغیر برنامه نویسی هستند که برای هر شئ میتواند مقادیر مختلفی داشته باشد.
برای ویژگیها باید سطح دسترسی مشخص کنیم. در مورد سطح دسترسیها در بخش انتهایی آموزش صحبت میکنم. فعلاً قبل از اسم هر ویژگی، کلمه کلیدی public
را قرار میدهیم.
<?php
class Car {
public $model;
public $color;
public $capacity;
}
?>
همانطور که میبینید سه ویژگی کلاس ماشین خود را با PHP تعریف کردیم. اگر لازم بود یکی از این مقادیر دارای مقدار پیشفرض باشد، میتوانیم آن را در همین بخش تعیین کنیم. در کلاس زیر، ظرفیت ماشین به طور پیشفرض ۵ نفر در نظر گرفته شده است.
همچنین میتوانید نوع هر متغیر را هم مشخص کنید. من برای model این کار را انجام داده و آن را از نوع رشته در PHP تعیین کردم.
<?php
class Car {
public string $model = "";
public $color;
public $capacity = 5;
}
?>
تعریف متدهای کلاس
متدها (method) در حقیقت رفتارهای کلاس هستند. برای تعریف متد در کلاس PHP روندی مشابه تعریف تابع PHP داریم. برای کلاس ماشین چهار متد در نظر گرفتم:
<?php
class Car {
public $model = "";
public $color;
public $capacity = 5;
function set_model($model){
if ($this->model == ""){
$this->model = $model;
}
}
function get_model(){
return $this->model;
}
function set_color($color){
$this->color = $color;
}
function start(){
// codes for start car
}
}
?>
درون متدهای یک کلاس میتوانیم هر کاری انجام دهیم! در قطعه کد بالا میبینید که در get_model()
یکی از ویژگیهای شئ را خوانده و بر میگردانیم. داخل set_color()
مقدار متغیر رنگ را تغییر میدهیم. در start()
نیز هر کاری پیچیدهای که مدنظرتان است را میتوانیم قرار دهیم. از دستورات شرطی پی اچ پی گرفته تا ساخت یک شئ دیگر!
متغیر this در PHP
در قطعه کد بالا از کلمه کلیدی $this
استفاده کردهام. این کلمه کلیدی که به شکل یک متغیر در کلاس PHP وجود دارد، برای اشاره به همین شئ استفاده میشود.
در بخش بعدی آموزش یاد میگیریم که چطور از یک کلاس، چند شئ مختلف بسازیم. در چنین حالتی وقتی میخواهیم به ویژگی رنگ همین ماشین دسترسی پیدا کنیم، از $this
استفاده میکنیم. یعنی میگوییم ویژگی مربوط به همین شئ که متد روی آن صدا زده شده است را فراخوانی کن!
استفاده از کلاس PHP
تا اینجا یاد گرفتیم چگونه یک کلاس در PHP ایجاد کنیم. class یک قالب یا نوعی ساختار است و میتوانیم از روی آن چندین شئ مختلف ایجاد کنیم. به طور کلی، متدهای همه اشیاء ثابت هستند و فقط مقدار ویژگیهای آنها فرق میکند.
وقتی از کلاس Car یک شئ میسازیم، آن شئ دارای یک id میشود که منحصر به فرد است. فعلاً همین قدر بدانید که هر چند تا شئ که ایجاد کنیم، از یکدیگر متمایز هستند.
ساخت شی از کلاس
برای ایجاد شئ از کلاس در PHP از کلمه کلیدی new استفاده میشود. در جلوی new نام کلاس را آورده و ()
را قرار میدهیم. به قطعه کد زیر توجه کنید:
<?php
$car1 = new Car();
$car2 = new Car();
فعلاً دو شئ از کلاس ماشین ایجاد کردم. در ادامه یاد میگیریم چطور به متدها و ویژگیها دسترسی داشته باشیم.
Car()
یک متد درون کلاس Car است که به طور ضمنی تعریف میشود؛ به آن سازنده یا Constructor گفته میشود. در جلسه بعدی در مورد نحوه کار سازندهها و تعریف سازندههای دلخواه در کلاس PHP بیشتر یاد میگیریم.
استفاده از شی در PHP
برای فراخوانی متدها و ویژگیهای public در شئ PHP از علامت ->
جلوی متغیر شئ استفاده میکنیم. سپس متد یا ویژگی را فراخوانی میکنیم. به قطعه کد زیر توجه کنید:
<?php
$car1 = new Car();
$car2 = new Car();
$car1->set_model("BMW x7");
$car2->set_model("Benz A45");
$car1->set_color("White Metallic");
با این قطعه کد، پس از ایجاد دو شئ $car1
و $car2
مدل هر دو را مشخص کرده و برای اولی رنگ تعیین کردم.
به طور مشابه میتوانم مدل ماشین اول را فراخوانی کرده و در خروجی نمایش دهم:
<?php
echo $car1->get_model();
چون ویژگیهایمان را public تعریف کردهایم، میتوانیم به طور مستقیم به همه آنها دسترسی داشته باشیم. در کد زیر، بدون اینکه از متدی در شئ استفاده کنم، رنگ ماشین دوم را تغییر میدهم:
<?php
$car2->color = "Black";
سطح دسترسی در کلاس PHP
برای متدها و ویژگیهای یک کلاس میتوانیم سطوح دسترسی مختلفی در نظر بگیریم. به کلاس ماشین که تا الآن داشتیم دقت کنید. ما میتوانیم همه متدها و ویژگیهایش را از بیرون از کلاس صدا بزنیم!
من برای متد set_model()
یک شرط گذاشتهام؛ اگر برای ماشین مدلی تعریف شد، دیگر نمیتوانیم آن را تغییر دهیم. حالا اگر کد زیر را بنویسیم، تغییر مدل ماشین بدون بررسی شرط مورد نظرمان انجام میشود!
<?php
$car1->model = "BMW x6";
این یک مثال ساده است! در برنامههای بزرگ باید دسترسیها و تغییرات غیر مجاز را مدیریت کنیم. به عنوان یک برنامهنویس خوب بهتر است اجازه دسترسی مستقیم به بعضی ویژگیها و حتی متدها را محدود کنیم.
برای این کار از کلمات کلیدی که برای Visibility استفاده میشود استفاده میکنیم. ۳ کلمه کلیدی داریم:
دسترسی/نمایش | محل قابل دسترس |
---|---|
public | همه جا |
protected | درون کلاس و کلاسهایی که از این کلاس ارثبری کردهاند |
private | فقط درون همین کلاس |
اگر هیچ سطح دسترسی برای اعضای درون کلاس PHP تعریف نکنیم، به طور پیشفرض public در نظر گرفته میشوند.
در کد زیر، کلاس Car را دوباره بازنویسی کردم و ویژگیهای رنگ را protected و مدل را private کردم! در این حالت، آخرین دستوری که برای خواندن مدل ماشین نوشته شده است، اشتباه بوده و با خطا مواجه میشویم.
<?php
class Car {
private $model = "";
protected $color;
public $capacity = 5;
function set_model($model){
if ($this->model == ""){
$this->model = $model;
}
}
function get_model(){
return $this->model;
}
function set_color($color){
$this->color = $color;
}
function start(){
// codes for start car
}
}
$my_car = new Car();
$my_car->set_model("BMW x7");
echo $my_car->model; // wrong!
?>
اگر مایلید مثالهای بیشتری در مورد سطوح دسترسی ببینید، صفحه مستندات آن مرجع خوبی است.
شاید بتوان گفت دو نوع خاص از کلاسها را داریم که به نام اینترفیس یا interface در PHP و کلاس abstract در PHP شناخته میشوند. در جلسات آینده از دورهٔ رایگان این دو مورد را نیز بررسی میکنم.
در این آموزش سعی کردم نحوه تعریف کلاس در PHP و کار با آن را قدم به قدم و به سادهترین روش توضیح دهم. اگر سؤالی دارید یا احساس میکنید نکتهای جا افتاده، از بخش دیدگاهها نظرتان را بیان کنید.
این آموزش بخشی از یک آموزش جامع و قدم به قدم در سبز دانش است: دوره رایگان آموزش PHP
این آموزش برای همیشه رایگانه! میتونید با اشتراکگذاری لینک این صفحه از ما حمایت کنید یا با خرید یه فنجون نوشیدنی بهمون انرژی بدید!
میخوام یه نوشیدنی مهمونتون کنم
عااااااالی
خیلی خوب توضیح دادید ممنونم استفاده کردم آفرین
خوشحالیم که براتون مفید بوده
ممونم از توضخیات عالیتون. از اموزش های سایت در مورد پی اچ پی خیلی استفاده کردم . خیلی مفید. گام به گام بودن توضیحات شما نشان از درک درست و صبر شماست . خیلی ممنونم از شما.
خیلی خوشحالیم که تونستیم مفاهیم این حوزه رو بهخوبی به شما منتقل کنیم. ممنونیم که با پیام پرمهرتون بهمون انرژی دادید.
لطفا درباره ارث بری هم اموزش بذارید. ممنون
ممنون بابت پیشنهادتون. حتما سعی میکنم آموزشهای پیشرفته شی گرایی رو ادامه بدم.