آموزش شی گرایی در php و ارث بری

علیرضا حاتمی نیا 1549

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

مفهوم ارث بری در شی گرایی

عبارت "وراثت" در شی گرایی به معنی استفاده از خصوصیات یا متدهای یک کلاس توسط کلاس دیگر است. 
برای روشن شدن این موضوع فرض کنید یک کلاس برای خلق انسان موجود است. از طریق این کلاس می توانید یک انسان با خصوصیات مختلف از جمله رنگ چشم، قد،جنسیت، اندازه قد و غیره را تولید کنید. حال در کلاس دیگر فرض کنید که قصد دارید یک "ابر انسان" یا avatar تولید کنید. این ابر انسان تمام ویژگی های یک انسان معمولی را دارد به اضافه ویژگی های خاص دیگر مانند داشتن دم، داشتن بال و یا قد فراتر از 3 متر و ...
پس این کلاس "ابر انسان" می تواند تمام خصوصیات یک کلاس "انسان" را به ارث ببرد.

نمونه ای از یک ابر انسان
ارث بری در شی گرایی

ارث بری در شی گرایی به معنای استفاده از خصوصیات یا متدهای یک کلاس توسط کلاس های دیگر است و با کلمه کلیدی extend مورد استفاده قرار می گیرد.

مثال ارث بری در PHP

برای مثال قصد داریم تا توضیحات بالا را به صورت کد در php پیاده سازی کنیم. فایلی با نام humen.php همراه با کلاسی به نام human می سازیم. در این کلاس متغیرهایی با نام name,height,gender موجود است و تابع سازنده __construct() و نیز سه تایع دیگر برای چاپ نام،جنسیت و اندازه قد یک انسان را نیز ایجاد می کنیم.

class human {
    public $name;
    public $gender;
    public $height;
    function __construct()
    {
        echo 'This is human class' . '</br>';
    }

    public function get_name() {
        echo 'name: ' . $this->name . '<br>';
    }
    public function gender() {
        echo 'gender: ' .$this->gender . '<br>';
    }
    public function height() {
        echo 'height: ' .$this->height . '<br>';
    }
}
$amir = new human;
$amir ->name = 'amir';
$amir ->gender = 'male';
$amir ->height =  180;
$amir -> get_name();
$amir -> gender();
$amir -> height();

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

This is human class
name: amir
gender: male
height: 180

حال کلاسی به نام avatar نیز ساخته که این کلاس خصوصیات کلاس human را نیز به ارث میبرد. این کلاس نیز می تواند یک یا چند تابع جداگانه مختص به خود داشته باشد که در اینجا یک تابع به نام flying برای آن ایجاد می کنیم.

class avatar extends human {
    public function flying() {
        echo "flying ...";
    }
}

$avatar = new avatar;
$avatar -> name ='avatar';
$avatar -> gender = 'female';
$avatar -> height =300;
$avatar -> get_name();
$avatar -> height();
$avatar -> gender();
$avatar -> flying();
خروجی کدهای بالا به صورت زیر است:
This is human class
name: avatar
height: 300
gender: female
flying ...

توجه داشته باشید که کلاس avatar متدهای name,hright,gender و حتی __construct() را از کلاس human به ارث برده و در عین حال نیز تابع flying که مختص به خود است را نیز اجرا کرده است.

دوباره نویسی خواص و متدهای ارث برده شده


توجه داشتید که در مثال متد سازنده __construct() متعلق به کلاس human توسط کلاس avatar به ارث برده شده است. گاهی لازم است که برخی از متدها مانند __constrauct() در کلاس فرزند تغییر کنند. برای این کار کافیست که متدی با همان نام در کلاس فرزند ساخته شود. 
در مثال بالا یک متد سازنده __construct() برای کلاس فرزند avatar ایجاد می کنیم:

class avatar extends human {
    function __construct() {
        echo 'This is avatar class' . '<br>';
    }

    public function flying() {
        echo "flying ...";
    }
}

$avatar = new avatar;
$avatar -> name ='avatar';
$avatar -> gender = 'female';
$avatar -> height =300;
$avatar -> get_name();
$avatar -> height();
$avatar -> gender();
$avatar -> flying();

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

This is avatar class
name: avatar
height: 300
gender: female
flying ...

دسترسی به خصوصیات و متدهای کلاس پدر

ارث بری همچنین به شما این امکان را می دهد تا از متدهای کلاس پدر در صورت وجود توسط کلمه کلیدی parent:: نیز استفاده کنید.
برای مثال در مثال بالا می توانید از تابع سازنده __construct() پدر با وجود اینکه در کلاس فرزند یک تابع سازنده وجود دارد نیز استفاده کنید.

require "human.php";
class avatar extends human {
    function __construct() {
        parent::__construct();
        echo 'This is avatar class' . '<br>';
    }

    public function flying() {
        echo "flying ...";
    }
}

$avatar = new avatar;
$avatar -> name ='avatar';
$avatar -> gender = 'female';
$avatar -> height =300;
$avatar -> get_name();
$avatar -> height();
$avatar -> gender();
$avatar -> flying();

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

This is human class
This is avatar class
name: avatar
height: 300
gender: female
flying ...

 

کلمات کلیدی

آموزش php php oop

لینک های مرتبط

طراحی سایت اصفهان
علیرضا حاتمی نیا
طراح و برنامه نویس وب
طراحی وبسایت های واکنش گرا
طراحی و پیاده سازی سیستم مدیریت محتوا
سئو و بهینه سازی سایت