کلاس ها : Class (Object Oriented Programming with PHP)
کلاسها از بهترین ابزارهای برنامه نویسی شیءگرا می باشد و سبب آسانی در برنامه نویسی و کم کردن حجم برنامه و ساخت یافته شدن برنامه می باشد.که این امر خود موجب افزایش سرعت و در نتیجه کارائی بهتر سایت می گردد.
دلیل استفاده از کلاس در برنامه نویسی :
- خوانایی بالای برنامه
- دسترسی راحت و انسجام کدهای تولید شده
- دسته بندی دادهای مورد نیاز بر اساس موارد استفاده
- جلوگیری از بارگذاری اطلاعات غیر ضروری در برنامه
5-1 : تعریف کلاس :
برای تعریف کلاس از ساختار زیر پیروی می کنیم.
class نام کلاس {
// متغیرهای کلاس و توابع در این بخش قرار می گیرند
} |
کلاس در واقع کوچکترین جزء ساختار شیءگرا می باشد و از آن می توان به عنوان آجر بنای یک ساختمان نام برد.
شما می توانید با استفاده از خاصیت شیءگرایی و ارث بری کلاس ها برای مقاصد مختلف استفاده نمایید و این انعطاف پذیری این ساختار را نشان می دهد.
5-2-انواع تعریف داده های کلاس :
نوع |
خاصیت |
روش تعریف متغیر |
روش تعریف تابع |
var |
فقط برای متغیرها استفاده می شود |
var $a=”Alireza”; |
ندارد |
public |
قابلیت دسترسی توسط اشیاء تولید شده از کلاس |
public $a=”Alireza”; |
public function abc(){…} |
private |
دسترسی فقط توسط توابع درون کلاس |
private $a=”Alireza”; |
private function abc(){…} |
protected |
عدم دسترسی برای نمایش محتوا (دسترسی فقط توسط توابع درون کلاس و کلاسهای اضافه شده به کلاس جاری) |
protected $a=”Alireza”; |
protected function abc(){…} |
*static |
قابلیت دسترسی توسط اشیاء تولید شده از کلاس |
static $a=”Alireza”; |
static function abc(){…} |
* : نکته :
1- در توابعی که از نوع static استفاده می شود از متغیر $this نمی توانید استفاده نمایید.
2- می توانید با نام کلاس و عملوند :: به این نوع تابع می توانید از بیرون کلاس بدون تولید شیء از کلاس دسترسی داشته باشید.
3- به صورت ترکیبی هم می توانید از نوع های ( public و static ) و (private و static) نیز استفاده نمایید.
4- برای مقداردهی و دسترسی به متغیرهای کلاس از نوع static بایستی با رابط "::" و نام متغیر static استفاده کرد.
به مثال هایی که در زیر آمده دقت نمایید.
<?php
// base class with member properties and methods
class Vegetable {
var $edible;
var $color;
function Vegetable($edible, $color="green")
{
$this->edible = $edible;
$this->color = $color;
}
function is_edible()
{
return $this->edible;
}
function what_color()
{
return $this->color;
}
} // end of class Vegetable
// extends the base class
class Spinach extends Vegetable {
var $cooked = false;
function Spinach()
{
$this->Vegetable(true, "green");
}
function cook_it()
{
$this->cooked = true;
}
function properties()
{
echo " cooked : ".$this->cooked. "\n";
echo " Color : ".$this->color. "\n";
echo " edible : ".$this->edible. "\n";
}
} // end of class Spinach
$A = new Spinach;
$A->cook_it();
$A->properties();
?>
|
|
در مثال بالا کلاس سبزیجات تعریف شده و کلاس اسفناج به کلاس سبزیجات اضافه شده است.
در تابع سازنده کلاس اسفناج رنگ سبز و خوراکی بودن آن با کلاس سبزیجات تعریف شده است.با تولید شیء از کلاس اسفناج و فراخوانی تابع cook_it خصوصیت قابل پخت بودن به آن را اضافه می کنیم. و در نهایت با فراخوانی تابع properties نتیجه این فراخوانی را خواهیم دید.
|
<?php
/**
* Define MyClass
*/
class MyClass
{
var $var = 'Variant<br />';
static $static = 'Static<br />';
public $public = 'Public<br />';
protected $protected = 'Protected<br />';
private $private = 'Private<br />';
function printHello()
{
echo $this->var;
echo $this::$static;
echo $this->public;
echo $this->protected;
echo $this->private;
}
}
$obj = new MyClass();
echo $obj->var; // Works
echo $obj::$static; // Works
echo $obj->public; // Works
echo $obj->protected; // Fatal Error
echo $obj->private; // Fatal Error
$obj->printHello(); // Shows Var ,Static ,Public , Protected and Private
/**
* Define MyClass2
*/
class MyClass2 extends MyClass
{
// We can redeclare the public and protected method, but not private
protected $protected = 'Protected2<br />';
function printHello()
{
echo $this->var;
echo $this::$static;
echo $this->public;
echo $this->protected;
}
}
$obj2 = new MyClass2();
echo $obj2->var; // Works
echo $obj2::$static; // Works
echo $obj2->public; // Works
echo $obj2->protected; // Fatal Error
echo $obj2->private; // Undefined
$obj2->printHello(); // Shows Var , Static , Public , Protected2, Undefined
?>
|
در تعریف کلاس بالا از 4 نوع تعریف متغیر در کلاس استفاده شده است.در شیءهای تولید شده از کلاسها می توانید نتیجه فراخوانی و مجوز دسترسی ها را مشاهده نمایید.
نوع protected فقط از طریق فراخوانی توابع در کلاسها توسط متغیر this قابل دسترسی بوده و سایر موارد از طریق شیء تولید شده هم قابل دسترسی می باشند.
نوع private هم فقط در کلاسی که تعریف شده قابل دسترسی می باشد و از طریق سایر کلاسهای اضافه شده به کلاس اصلی قابل دسترسی نمی باشد. |
منابع اینترنتی :
http://www.php.net
http://www.w3schools.com