کدخبر: 19310

مفهوم ارث بری یا inheritance در PHP - بررسی با مثال

 

 

مقدمه ارث بری (inheritance) در PHP

این مقاله از وب سایت کلیک سایت ، مرجع آموزش طراحی سایت و آموزش PHP و آموزش HTML برگرفته شده است.

ایده وراثت خیلی قدرتمند است. زیرا به شما اجازه می دهد تا یک کلاس جدید ایجاد کنید و بتوانید از propertyها و متد های یک کلاس موجود، دوباره استفاده کنید.

یک کلاس که از کلاس دیگری به ارث می برد، زیر کلاس (subclass) یا  کلاس فرزند (childclass) یا کلاس مشتق شده (derived class) نامیده می شود.

کلاسی که یک کلاس فرزند دارد و خواص آن را به ارث می برد به عنوان کلاس والد یا پدر و مادر (parentclass) یا یک سوپرکلاس (superclass) یا کلاس پایه (basedclass) شناخته می شود.

علاوه بر propertyها و متد های ارث برده شده از کلاس پدر و مادر، یک زیر کلاس می تواند propertyها و متد های اضافی نیز داشته باشد.

اگر می خواهید چندین کلاس مشابه ایجاد کنید وراثت می تواند برای شما بسیار مفید باشد.

شما propertyها و متد های مشترک را در کلاس پدر و مادر و propertyها و متد های خاص را در کلاس های فرزند قرار دهید.

این به شما کمک می کند تا از تکرار کدها جلوگیری کنید.

مثالی برای ارث بری (inheritance) در PHP

در جلسات قبلی، در آموزش "اشیاء و کلاسها  در php"، ما یک کلاس حساب بانکی به نام (BankAccount) ایجاد کردیم. ما می توانیم کلاس حساب بانکی (BankAccount) را به وسیله ی ساخت کلاس های دیگری گسترش (extend) دهیم. به عنوان مثال می توانیم یک کلاس به نام کلاس حسابها (saving account class) و یک کلاس دیگر به نام چک کردن حساب بانکی(checking account class) بسازیم که از کلاس حساب بانکی (BankAccount) ارث بری کنند و به این ترتیب از property ها و متدهای کلاس حساب بانکی (BankAccount) می توانیم چند بار در کلاس های دیگر، استفاده کنیم.

نمودار وراثت UML

ما می توانیم روابط بین کلاس های BankAccount ، SavingAccount و CheckingAccount را با استفاده از نمودار کلاس UML به صورت زیر مقایسه کنیم:

2

ساختار فایل های class

ما معمولا کد هر کلاس را در یک فایل پی اچ پی جداگانه قرار می دهیم که دارای نامی مشابه نام کلاس است. همه فایل های کلاس معمولا در یک پوشه به نام "classes" به صورت زیر قرار می گیرند:

3

مثال 

برای به ارث بردن از یک کلاس، از کلمه کلیدی extended استفاده کنید. مثال زیر نشان می دهد که چگونه کلاس SavingAccount از کلاس BankAccount به ارث می برد:

<?php

 

 

 
class SavingAccount extends BankAccount{

 
 /**

 
 * monthly interest rate

 
 * @var float

 
 */

 
 private $interestRate;

 

 

 
 /**

 
 * init saving account with account no, initial amount and

 
 * interest rate

 
 * @param string $accountNo

 
 * @param float $initialAmount

 
 * @param float $interestRate

 
 */

 
 public function __construct($accountNo,$initialAmount,$interestRate){

 
 parent::__construct($accountNo, $initialAmount);

 
 $this->interestRate = $interestRate;

 
 }

 

 

 
 /**

 
 *  Add interest to the balance

 
 */

 
 public function addInterest(){

 
 $amount = parent::getBalance() * $this->interestRate / 100;

 
 parent::deposit($amount);

 
 }

 
}

 

بیایید کلاس SavingAccount را دقیق تر بررسی کنیم.

ابتدا باید کلاس SavingAccount از کلاس BankAccount ارث بری کند برای این کار از کلمه کلیدیextended  به صورت زیر استفاده می کنیم :

class SavingAccount extends BankAccount{

 
....

 
}

 

ما در مرحله ی دوم، در داخل سازنده (constructor) کلاس SavingAccount، سازنده کلاس BankAccount را با استفاده از سینتکس زیر فراخوانی می کنیم:

parent::__construct($accountNo, $initialAmount);

 

علاوه بر این، ما همچنین نرخ بهره ( interest rate)در سازنده کلاس SavingAccount را مقداردهی اولیه (initialize) می کنیم.

در مرحله ی سوم، ما یک متد به نام addInterest()  را در کلاس SavingAccount اضافه می کنیم.

 ما در این متد، متدهای کلاس والد یعنی (BankAccount) را با استفاده از سینتکس زیر فراخوانی می کنیم :

parent::getBalance()

و

parent::deposit($amount)

 

همانطور که می بینید، متد addInterest موجود در کلاس SavingAccount از متدهای موجود در کلاس والد یعنی BankAccount استفاده می کند.

 

 

ارسال نظر: