آموزش کلاس های Abstract

Image تحقیقات

آموزش کلاس های Abstract

با سلام و درود

امروز میخوام درباره کلاس های از نوع abstract در زبان php حرف بزنم.

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

یکی از مزایای کلاس abstract این است که می توان در داخل آنها تابع هایی (متد) تعریف کرد که بدنه نداشته باشن.برای این منظور باید نوع اون تابع هم abstract باشد و  زمانی که که یک کلاس از کلاس abstract مشتق بشه اون توابع رو باید پیاده کنه یعنی بدنه ی اون تابع رو تکمیل کند.

پس در داخل کلاس هایی از نوع abstract هم میتوان تابع های معمولی نوشت هم تابع هایی از نوع abstract که بدنه نداشته باشن.

مزیت های استفاده از abstarct:

  1. کم تر شدن کدهای نوشته شده
  2. افزایش سرعت برنامه
  3. روان تر و خواناتر بودن کدها

مثال :

به عنوان مثال اگر بخواهیم چندین کلاس مختلف برای کار با دیتابیس های مختلف در برنامه تعریف کنیم که در آن برخی کارها یکسان می باشد؛ میتوانیم یک کلاس abstract برای تعریف اولیه و توابع یکسان آنها تعریف کنیم و سپس به نسبت هر دیتابیس توابع مخصوص آن را فراخوانی کرد.

<?php
abstract class Base_DB{ 
    private $id; 
    abstract function update($data,$id); 
    abstract function insert($data); 
    function save($data){ 
        if(is_null($this->id)){ 
            $this->insert($data); 
        }else{ 
            $this->update($data,$this->id); 
        } 
    } 
} 
class MySQL_DB extends Base_DB{ 
    function update($data,$id) 
    { 
        // کدهای مربوط به ویرایش 
    } 
    function insert($data) 
    { 
        // کدهای مربوط به درج کردن 
    } 
} 
class Oracle_DB extends Base_DB{ 
    function update($data,$id) 
    { 
        // کدهای مربوط به ویرایش 
    } 
    function insert($data) 
    { 
        // کدهای مربوط به درج کردن 
    } 
}
  • در خط 2 کلاسی از نوع abstract تعریف شده.
  • در خط 4 و 5 تابع های Insert , Update از نوع  abstract تعریف شده اند و می بینید که این توابع بدنه ندارند.
  • در خط 6 هم یک تابع معمولی تعریف شده.
  • در خط 14 و 24 یک کلاس معمولی ایجاد شده که از کلاس abstract مشتق شده است.پس بنابراین باید توابعی که به صورت abstract تعریف شده بودند راتکمیل کند و بدنه ی آنها را تشکیل دهد که این کار در خط های (15 و 19)   (25و29) اینجام شده است.

با کمک کلاس های MySQL_DB و Oracle_DB که در بالا تعریف شد می توان با تابع save و یا هر تابع دیگری کارهای مربوطه را انجام داد؛ توجه داشته باشید که توابع update و insert که در کلاس Base_DB به صورت abstract تعریف شده اند باید در کلاسهایی که از آن سرچشمه می گیرند تعریف شده باشند.

مثال دیگر :

 

<?php 
abstract class Animal
{
    public $name;
    public $age;
    
    public function Describe()
    {
        return $this->name . ", " . $this->age . " years old";    
    }
    
    abstract public function Greet();
}
class Dog extends Animal
{
    public function Greet()
    {
        return "Woof!";    
    }
    
    public function Describe()
    {
        return parent::Describe() . ", and I'm a dog!";    
    }
}
$animal = new Dog();
$animal->name = "Bob";
$animal->age = 7;
echo $animal->Describe();
echo $animal->Greet();

 

خروجی :

 

خب این جلسه هم به پایان رسید