چارچوب MVC در PHP به شدت شی گرا بوده و برای ورود به جزئیات این چارچوب، لازم است با برنامه نویسی شی گرا آشنایی داشته باشید. در این بخش و بخش بعدی برنامه نویسی شی گرا به زبان PHP را آموزش  می دهیم .  

برای آشنایی کلی با چارچوب MVC به بخش معرفی چارچوب MVC مراجعه کنید.

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

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

به مثال زیر توجه کنید:

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

برنامه نویسی شی گرا در ابتدا باعث سردرگمی هر برنامه نویسی خواهد شد زیرا باید طبق یک اصل جدید برنامه نویسی کرد که احتمالا قبلا اصلا به این اصل بها نمی دادند . اما به هر حال برنامه نویسی شی گرا واقعا سر راست می باشد و برنامه نویسی را برای هر برنامه نویسی ، راحت تر می کند.

 کلاس ها  و اشیا در برنامه نویسی شی گرا با PHP

قبل از این که به صورت کاملا  وارد بحث برنامه نویسی شی گرا شویم باید تفاوت های بین اشیا و کلاس ها را متوجه شویم .

یک انسان را در نظر بگیرید . کلاس ها شمای کلی انسان ( مانند ساختار های استخوانی و … )‌را تشکیل میدهند و اشیا در اصل خود انسان ها هستند که طبق کلاس ها ساخته شده اند . میتوان گفت یک کلاس نقشه ساختمانی در نظر گرفت و هر کدام از ساختمان های ساخته شده بر اساس آن نقسه را یک شیء ساختمان نامید . پس کلاس یک مفهوم ذهنی و انتزاعی است در حالی که اشیا بصورت واقعی وجود داشته و نمونه های عینی ساخته شده بر اساس کلاس تند.

 

ساختار کلاس ها ( class‌) در برنامه نویسی PHP

ساختار املایی یک کلاس بسیار ساده می باشد . ابتدا با استفاده از کلمه کلیدی class تعریف می کنیم که ما در حال ساخت یک کلاس هستیم ، سپس نام کلاس با می آوریم و بعد از آن {} که به زودی متد ها و خصوصیات کلاس در آن قرار میگیرند .

class ClassName {
// خصوصیات اینجا قرار میگیرند
}

ما کلاس را تعریف کرده ایم و مانند توابع زمانی که بخواهیم از آن ها استفاده کنیم باید آن ها را صدا بزنیم . برای این کار از new استفاده میکنیم و کلاس ساخته شده ( شی )‌ را در یک متغیر ذخیره میکنیم .

$classVar = new ClassName();
var_dump($classVar); // محتویات $classVar

خروجی مانند شکل زیر خواهد بود‌:

object(ClassName)#1 (0) { }

همان طور که می بینید PHP میگوید که شما یک شی دارید که با حرف های ما درباره کلاس ها و اشیا یکی هست .

تعریف خصوصیات کلاس ها

زمانی که ما بخواهیم یک سری اطلاعات را در کلاس ها ذخیره نماییم از خواص کلاس ها ( properties ) استفاده میکنیم .

این خواص مانند متغیر های معمولی هستند اما تعریف آن ها یک تفاوت های جزئی ایی دارد .

به نمونه زیر توجه کنید :

class Model {
public  $db = "amoozesh";
}
$m = new Model();
var_dump($m);

خروجی به شکل زیر خواهد بود :

object(Model)#1 (1) { ["db"]=> string(21) "amoozesh" }

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

همانطور که دیدید ما مانند متغیر های معمولی خصوصیت db را برای کلاسمان تعریف کردیم که در var_dump هم نمایش داده شد .

ما می توانیم در اشیا نیز به این خواص دسترسی داشته باشیم . به کد زیر توجه کنید .

echo $Model->db;

این کد خصوصیت db را که در شی Model هست به ما نمایش میدهد .

عبارت –> در شی گرایی یک ساختار از پیش ساخته شده است که به وسیله ی آن به متد ها و خواص اشیا دسترسی خواهیم داشت .

در کد بالا توجه کنید که db بدون $ می باشد .

تمام کد به شکل زیر خواهد بود :

class Model {
public  $db = "amoozesh";
}$m = new Model();
echo $m->db;

تعریف متد ها برای کلاس ها

متد ها ، توابعی مخصوص کلاس ها می باشند که به وسیله ی آن ها می توانیم عملیات های مورد نظرمان را انجام دهیم و به خواص و دیگر متد های کلاس دسترسی داشته باشیم .

برای مثال :

class Model {
public $db = "amoozesh";public function setDB($dbname){
$this->db = $dbname;
}public function getDB(){
return $this->db;
}
}

در php ما میتوانیم با استفاده از متغیر از پیش ساخته شده ی $this به متد ها و خواص کلاس ها دسترسی داشته باشیم .

برای مثال در کد بالا با استفاده از $this->db توانستیم به db ایی که تعریف کرده بودیم دسترسی پیدا کنیم .

حالا میتوانیم در شی ساخته شده مان متد ها را صدا بزنیم تا عملیات ها را انجام دهند :

<?phpclass Model {
public $db = "amoozesh";public function setDB($dbname){
$this->db = $dbname;
}
public function getDB(){
return $this->db;
}
}$m = new Model();
echo $m->getDB(); // خروجی :‌  amoozesh
$m->setDB("library ");
echo $m->getDB(); // خروجی :  library
?>

قدرت شی گرایی در این است که ما فقط یک بار یک کلاس را می نویسیم در حالی که می توانیم به هر مقداری که میخواهیم شیء طبق این کلاس ها بسازیم در حالی که  اشیا مجزا از هم هستند (‌که اگر از شی گرایی استفاده نمی کردیم کد نویسی ما ۲ برابر میشد ‌)

<?php
class Model {
public $db = "amoozesh";public function setDB($dbname){
$this->db = $dbname;
}
public function getDB(){
return $this->db;
}
}$m1 = new Model();
$m2 = new Model();$m1->setDB("amoozesh ");
$m2->setDB("library ");echo $m1->getDB(); // خروجی :  amoozesh
echo $m2->getDB(); // خروجی :  library?>

متدهای سازنده و مخرب

کلاس ها امکانات خوبی دارند که کد نویسی را برای ما بسیار راحت تر میکنند .

این کد ها باعث کم شدن کد ها و همچنین راحتی کار توسعه دهنده ها میشوند و قطعا در بسیاری از پروژه ها از آنها استفاده خواهید کرد .

متد سازنده  ( constructor )

فرض کنید بخواهید زمانی که از یک کلاس یک شیئ می سازیم ، یک سری عملیات انجام شوند . برای این کار از متد __construct() استفاده خواهیم کرد .این متد دقیقا زمانی که کلاس را فراخوانی می کنیم ، به صورت خودکار صدا زده خواهد شد .

<?php
class Model {
public $db = "amoozesh";
public function __construct(){
echo "you called Model class ! <br>";
}
}$m1 = new Model();
$m2 = new Model();
?>

خروجی کد بالا به شکل زیر است :

you called Model class !
you called Model class !

همچنین شما میتوانید به تابع سازنده ورودی هم بدهید . این ورودی ها را زمان تعریف کلاس ، تعریف میکنید :

<?php
class Model {
public $db = "amoozesh";
public function __construct($dbname) {
$this->db = $dbname;
}
public function setDB($dbname){
$this->db = $dbname;
}
public function getDB(){
return $this->db;
}
}
?>

در این صورت موقع ایجاد شیء باید مقداری برای پارامتر سازنده تعیین کنید. بصورت زیر:

$m1 = new Model(“amoozesh”);
$m2 = new Model(“library”);

متد نابود کننده ! ( __destruct )

زمانی که شی ما از بین برود ( پس از پایان اجرای کد های PHP و یا هنگام unset کردن ) این متد به صورت اتوماتیک فراخوانی می شود . می توانید در این متد عملیات هایی مانند fclose و … را قرار دهید.

در این قسمت با مفهوم کلاس و اشیا در برنامه نویس PHP آشنا شدید در بخش بعدی مفهوم ارث بری را آموزش خواهیم داد.

نمایش قابل چاپ