سبد (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!

دیدگاه‌ها  

+1 # امیرکیان 1395-11-29 17:12
منبع آموزشی خوبی به فارسی برای شیگرایی درست کردید. اگر به موارد زیر بپردازید، آموزش تان تکمیل تر خواهد شد:
1- namespace ها
2- ارث بری چندگانه در php امکان ندارد
3- geter و seter
اگر اینا را هم به آموزشهایتان اضافه کنید عالی میشود. و فقط اگر امکانش هست یک رفرنس خوب هم برای شیگرایی در php معرفی کنید.
پاسخ دادن | پاسخ به نقل قول | نقل قول کردن
+1 # مسعود1 1396-02-06 10:37
با سلام
من هم گفته این دوستمون رو تایید میکنم.
حتما مبحث trait ها رو هم برای رفع مشکل ارث بری چندگانه قرار بدین
اینطوری آموزشتون کامل تر میشه
یا علی
پاسخ دادن | پاسخ به نقل قول | نقل قول کردن
+1 # امیر پهلوان صادق 1396-02-10 14:24
سلام، پیشنهاد می کنم برای پیاده سازی یک پروژه کاملا شیءگرا، از فریم ورک لاراول استفاده کنید.
اطلاعات بیشتر در لینک زیر:
http://beyamooz.com/product/laravel/%D8%A2%D9%85%D9%88%D8%B2%D8%B4-%D9%BE%D8%B1%D9%88%DA%98%D9%87-%D9%85%D8%AD%D9%88%D8%B1-%D9%81%D8%B1%DB%8C%D9%85-%D9%88%D8%B1%DA%A9-%D9%84%D8%A7%D8%B1%D8%A7%D9%88%D9%84
پاسخ دادن | پاسخ به نقل قول | نقل قول کردن
+1 # armanamraei 1395-05-17 18:34
اول یه تشکر کنم از آموزش خوبتون .
میخواستم بدونم حالا که من این آموزشو تموم کردم باید در ادامه چه مبحثیو بخونم و ممنون میشم اگه منبع مناسبی برای آموزش سراغ دارین بگین .
پاسخ دادن | پاسخ به نقل قول | نقل قول کردن
0 # امیر پهلوان صادق 1395-05-18 12:31
ابتدا به شما دوست عزیز بابت فراگیری PHP تبریک می گم و برای ادامه پیشنهادی که براتون دارم مشاهده فیلم آموزش ساخت فروشگاه در PHP است.
www.beyamooz.com/product/eshop
البته می توانید آموزش jQuery را در کنار فیلم بالا مطالعه فرمایید.
پاسخ دادن | پاسخ به نقل قول | نقل قول کردن
0 # raghb 1394-10-08 00:58
خدا خیرتون بده
من تا این مرحله مرجعم فقط بیاموز بود.
دستتون درد نکنه انشالله جبران کنیم
خسته نباشید
پاسخ دادن | پاسخ به نقل قول | نقل قول کردن
+1 # مهدی 1394-09-02 13:02
سلام با تشکر از آموزش خوبتون ...

فکر می کنم در بخش Abstract متغییر id را به اشتباه private نوشته شده
پاسخ دادن | پاسخ به نقل قول | نقل قول کردن
+2 # امیر پهلوان صادق 1395-05-18 12:34
سلام
خیر متغیر id باید بصورت private باشد.
پاسخ دادن | پاسخ به نقل قول | نقل قول کردن
+3 # parsa24 1394-05-20 21:15
سلام خسته نباشید من درست نفهمیدم چرا یک بار باید تابع بدونه بدنه و یکبار با بدنه تعریف شود
اگر اینجوری نشه چی میشی.؟ فقط ارزش مفهومی داره؟
پاسخ دادن | پاسخ به نقل قول | نقل قول کردن
+2 # امیر پهلوان صادق 1395-05-18 12:41
سلام
اتفاقا بسیار کاربردی است. بعنوان مثال در یک بازی فوتبال تصور بفرمایید که وظایف دروازه بان را بصورت کتبی به افرادی که قرار است در این پست فعالیت کنند ابلاغ کنیم...! ابتدا نفر اول با روش های مربوط به خودش Document ارائه شده را مطالعه می کند و در پست خود قرار میگیرد اما وی کاملا مختار است که در برخی از مواقع بعنوان مدافع و یا حتی گل زن، ظاهر شود و این کار را انجام می دهد. حالا نفر دوم بعد از مطالعه Document پشت دروازه قرار می گیرد اما تشخیص وی این است که از هرگز پست خود را برای دفاع یا گل زدن ترک نکند.
در اینجا Document ارائه شده به دروازه بان حکم بدنه تابع ما را دارد و نحوه ی انجام وظیفه توسط دروازه بان، حکم پیاده سازی تابع را دارد...!
البته در مطلب بالا کاربرد واقعی Abstract گفته شد. در واقع اگر برنامه ای شما، امکان اتصال به پایگاه داده های مختلف را داشته باشد، قسمت Insert و Update و ... برای هر کدام از پایگاه داده ها، متفاوت خواهد بود. اما اگر بخواهیم اصولی پیش برویم باید یک کلاس Abstract تعریف کنیم و کلیه متدهای مورد نیاز برای کار با پایگاه داده را در آن تعریف کنیم و در ادامه به ازای هر پایگاه داده یک کلاس دیگر تعریف کنیم و شروع به پیاده سازی متدها کنیم.
پاسخ دادن | پاسخ به نقل قول | نقل قول کردن
+2 # مهدی ربانی 1394-02-26 14:41
سپاس از آموزش خوبتون.
آموزش php mvc توی برنامه تون نیست؟
پاسخ دادن | پاسخ به نقل قول | نقل قول کردن
+3 # akbar رحیمی 1394-02-26 18:30
فعلاً بدلیل مشغله زیاد، آموزش PHP MVC امکان پذیر نیست، اما ان شا الله در آینده انجام خواهد شد.
پاسخ دادن | پاسخ به نقل قول | نقل قول کردن
+7 # امیر خوش نیت 1393-08-03 13:24
متشکر
پاسخ دادن | پاسخ به نقل قول | نقل قول کردن
+9 # درویش 1393-07-17 15:35
عالیییییییییییی یی
پاسخ دادن | پاسخ به نقل قول | نقل قول کردن
+7 # Online98 1392-11-24 22:26
ممنون ، عالی بود
پاسخ دادن | پاسخ به نقل قول | نقل قول کردن

آموزش صوتی PHP

بستن
مدرس:
سوال و جواب:

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

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

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