آموزش polymorphism در زبان php
- توسط : علی حسین شهابی
- 0 نظر
با سلام خدمت دوستان عزیز
امروز میخوام یکم درباره polymorphism استفاده کنم . همانطور که می دانید این مفهوم در بین زبان php و دیگر زبان های برنامه نویسی مشترک است و فقط ممکن است از نظر پیاده سازی تفاوت هایی داشته باشند .
در واقع در polymorphism , یک Method در یک کلاس زیر مجموعهی خودش Override میشه! . یعنی کلاس پدر شامل متدهایی است که کارایی لازم را در کلاس فرزندان ندارد . پس در نتیجه این متدها باید در کلاس فرزندان با همان نام بازنویسی شوند . این کار چه زمانی اتفاق میافتد ؟ موقعی که متد مورد نظر در کلاس پدر , کارایی نداشه باشد (پس باید به کل بازنویسی شود ) یا متد مورد نظر در کلاس پدر بخشی از نیاز ما را فراهم می کند که باید بقیه نیاز را بازنویسی کنیم .
تعریف دیگری که در سایت ها پیدا می کنید به این صورت است :
According to the Polymorphism principle, methods in different classes that do similar things should have the same name.
و میگه متدهایی که کار مشابه ای را در کلاس های مختلف انجام می دهند باید نام یکسانی داشه باشند . مثلا متدی که برای محاسبه ی محیط دایره است و متدی که برای محیط مستطیل است چون کار مشابه ای انجام می دهند باید نام یکسانی داشه باشند .(به فرض calcArea )
مثال ۱ :
<?php
/**
*
*/
class Human
{
public $firstName ;
public $lastName ;
public $age ;
public $phone ;
public function __construct($firstName , $lastName ,$age , $phone)
{
$this->firstName = $firstName ;
$this->lastName = $lastName ;
$this->age = $age ;
$this->phone = $phone ;
}
public function write()
{
return 'adsf';
return $this->firstName . " " . $this->lastName ;
}
}
/**
*
*/
class BoyHuman extends Human
{
function __construct($firstName , $lastName ,$age , $phone)
{
parent::__construct($firstName , $lastName ,$age , $phone);
}
public function write()
{
return $this->firstName . " " . $this->lastName ." " . $this->age ;
}
}
/**
*
*/
class GirlHuman extends Human
{
function __construct($firstName , $lastName ,$age , $phone)
{
parent::__construct($firstName , $lastName ,$age , $phone);
}
public function write()
{
return $this->firstName . " " . $this->lastName . $this->phone ;
}
}
در خط ۵ کلاسی تعریف شده به نام Human که در واقع کلاس پدر ما است و بقیه کلاس ها از این کلاس ارث بری می کنند . یک متد write دارد که نام و نام خانوادگی را چاپ می کند .
در کلاس های فرزند این متد باز نویسی شده است و هر کدام مقدار خاصی را به این متد اضافه کردن مثلا در کلاس BoyChild علاوه بر نام و نام خانوادگی , شماره تلفن هم برگشت داشته می شود .
حالا در فایل index.php می تواینم از این کلاس ها استفاده نماییم و هر کدام که لازم داشتیم فقط کافی است متد write آنها را صدا بزنیم .
<?php
include_once 'Human.php';
<?php
include_once 'Human.php';
$boyHuman = new BoyHuman('Alihossein' , 'Shahabi' , '26' , '09121234567');
// echo $boyHuman->write();
$girlHuman = new GirlHuman('Sara' , 'Amini' , '56' , '09128888888');
echo $girlHuman->write();
$boyHuman = new BoyHuman('Alihossein' , 'Shahabi' , '26' , '09121234567');
// echo $boyHuman->write();
$girlHuman = new GirlHuman('Sara' , 'Amini' , '56' , '09128888888');
echo $girlHuman->write();
مثال ۲ :
<?php
/**
* interface Shape
*/
interface Shape {
public function calcArea();
}
/**
* class Circle
*/
class Circle implements Shape {
private $radius;
public function __construct($radius)
{
$this -> radius = $radius;
}
// calcArea calculates the area of circles
public function calcArea()
{
return $this -> radius * $this -> radius * pi();
}
}
/**
* class Rectangle
*/
class Rectangle implements Shape {
private $width;
private $height;
public function __construct($width, $height)
{
$this -> width = $width;
$this -> height = $height;
}
// calcArea calculates the area of rectangles
public function calcArea()
{
return $this -> width * $this -> height;
}
}
در مثال دوم از در polymorphism , ما یک فایل داریم به نام Shape.php و داخل این فایل کلاس هامون را تعریف کرده ایم . ابتدا یه اینترفیس ایجاد کردیم برای کلاس های که مجبور باشن متد calcArea را در خود داشته باشند . سپس برای هر کلاس که از Shape تاثیر میگیرد و implements می شود متد calcArea را ساختیم و محیط را حساب کردیم .
سپس در فایل index.php هر کلاسی که لازم داشتیم را فراخوانی کرده و متد calcArea آن را صدا زده و قیمت آن را نیز با استفاده از تابع price محاسبه کرده .
<?php
include_once 'Shape.php';
function price(Shape $area)
{
return $area->calcArea() * 250 ;
}
$circ = new Circle(3);
$rect = new Rectangle(3,4);
echo "$" . price($circ);
echo '
';
echo "$" .price($rect);
خب مقاله امروز هم به پایان رسید.خوشحال میشم مثل همیشه نظراتتون رو اعلام کنید.