سبد (0)

تجرد یا abstract در PHP

تجرد یا Abstract:

Wiki

تجرد یا Abstract موقعی استفاده می شود که بخواهیم کلاس یا تابعی را بدون داشتن بدنه تعریف کنیم و بخواهیم بدنه آن را بعداً تعریف کنیم.

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

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

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

مثال:

<?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)
    {
        // کدهای مربوط به درج کردن 
    } 
}
؟>

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


interface

Wiki

کلاسهایی که به صورت interface تعریف می شوند تقریباً همانند کلاس هایی هستند که به صورت abstract تعریف می شوند اما نحوه تعریف و استفاده آنها متفاوت می باشد.

مثال:

<?php
interface class Base_DB {
    public function update($data,$id);
    public function insert($data);
}

class MySQL_DB implements Base_DB{ 
    function update($data,$id)
    { 
        // کدهای مربوط به ویرایش 
    }
    function insert($data)
    {
        // کدهای مربوط به درج کردن 
    }
}
class Oracle_DB implements Base_DB{ 
    function update($data,$id)
    { 
        // کدهای مربوط به ویرایش 
    }
    function insert($data)
    {
        // کدهای مربوط به درج کردن 
    }

؟>

توجه داشته باشید که کلاسهایی که به صورت interface تعریف می شوند نباید شامل بدنه یک تابع باشند؛ در صورتی که کلاس های abstract می توانستند ادغامی از توابع معمولی و توابع abstract شوند.
به این نکته نیز توجه داشته باشید که کلاسهای interface بجای extends با implements توسعه می یابند.


تشخیص کلاس یک شئ

Wiki

در برنامه نویسی توجه به این نکته که آیا شئ مورد نظر از کلاس مد نظر ما ساخته شده است یا نه نکته ای است که کاربرد های زیادی دارد.

برای این منظور می توان از دستور instanceof استفاده کرد؛

instanceof همچنین برای کلاس هایی که از یک کلاس دیگر ارث بری کرده اند نیز استفاده می شود؛

مثال:

<?php 
class Parent
{
    // ...
}

class PLUS extends Parent
{
    // ...
}

$test = new PLUS();
if($test instanceof PLUS)
{
    echo "test comes from PLUS....<br />";
}
if($test instanceof Parent)

    echo "test comes from Parent....<br />";

?>

خروجی کد بالا:

test comes from PLUS....
test comes from Parent....

همانطور که در مثال بالا دیده میشود test$ هم از نوع PLUS است و هم از نوع Parent!

آموزش صوتی PHP

ابزاری که در پیش روی دارید یکی از ابزارهای بسیار کاربردی سایت بیاموز در زمینه آموزش است، این ابزار برای سهولت یادگیری شما کاربران محترم طراحی شده است.

فقط کافی است روی عنوان پاراگراف مورد نظرتان کلیک کنید تا پخش صدا آغاز شود ...!

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