پنجشنبه 02 آذر 1396

فصل 6 : کلاسها : آموزش PHP

کلاس ها : 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

عمومی

علیرضا بلوردی (برنامه نویس PHP)
سیرجان, کرمان
علیرضا بلوردی
ولی عصر, سیرجان, کرمان 7817645939
+989131789658
نمونه کارها و کامپوننتهای نوشته شده توسط علیرضا بلوردی برنامه نویس جوملا و PHP