عنوان مقاله :

خصوصیت (Abstract) در php

گردآوری و تالیف : محمد صادق زحمتکش
تاریخ انتشار : 27 تیر 1396
دسته بندی ها : پی اچ پی

یکی از خصوصیاتی که زبان php در قالب شی گرایی از آ« بهره مند میباشد،خاصیت Abstract می باشد.

خاصیت Abstract زمانی استفاده می شود که بخواهیم کلاس یا متدی را بدون داشتن بدنه تعریف کنیم و بخواهیم بدنه آن را بعداً تعریف میکنیم.به عنوان مثال اگر بخواهیم چندین کلاس مختلف برای کار با بانک های اطلاعاتی مختلف در برنامه تعریف کنیم که در آن برخی کارها یکسان می باشد. در این زمان متد یا کلاس های آن بانک ها را خارج از بدنه تعریف و در مکان مشخص بدنه ی مربوط به توابع و کلاس هارا تعریف مینماییم. میتوان یک کلاس abstract و توابع یکسان آنها را تعریف کنیم و سپس به نسبت هر بانک اطلاعاتی که در برنامه استفاده شده است یا هر قطعه از برنامه توابع مخصوص آن را فراخوانی کرد و از آن توابع و کلاس هایی که خارج از بدنه ایجاد شده استفاده نماییم.

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

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 تعریف شده اند باید در کلاسهایی که از آن سرچشمه می گیرند تعریف شده باشند.

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

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

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

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

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 تعریف میشوند:

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

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

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

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

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

class Parent 
{ 
    // ... 
} 

class PLUS extends Parent 
{ 
    // ... 
} 

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

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

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

مقالات پیشنهادی

کلاس PHP MySQL Websocket Chat

در این مقاله میخواهیم به معرفی کلاسی بپردازیم که با اضافه کردن آن به پروژه ی خود قادر خواهید بود تا قابلیت چت را به برنامه ی خود اضافه نمایید.

CMS یا فریمورک PHP : کدامیک برای کار من مناسب است ؟

چهار ویژگی که CMS ها رو از فریمورک های PHP متمایز میکنه. وقتی می خواهید یک وبسایت برای یک کمپانی بسازید, اینکه مشتری این تفاوت ها رو درک کنه موجب هموا...

مفهوم و کاربرد Session در PHP

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

متد های جادویی php

در php  تعدادی متد وجود دارند که به آنها متد های جادویی ( Magic Methods ) میگویند. این متد ها با دو خط زیر دار __ شروع  می شوند و هرکدام کار خاصی را ا...

دیدگاه های ارزشمند شما

برای ارسال نظر لازم است ابتدا وارد سایت شوید
برنامه نویس | 5 ماه پیش

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

حسام موسوی | 5 ماه پیش

سلام با تشکر از نظرتون حتما به نویسنده میگم که دقت بیشتری کنه
با تشکر از شما

محمدصادق زحمتکش | 5 ماه پیش

متشکر از تذکرتون