برنامه نویس فان | Fun Developer یک آدم ساده که عاشق برنامه نویسی و کد زدنه :) تلاش میکنه تا به بقیه کمک کنه. توسعه دهنده هسته لاراول و فضای اوپن سورس. فاندر پرانتز و کد نیوز.

پلی مرفیسم (Polymorphism) چیه؟
پلیمورفیسم (Polymorphism) یکی از مفاهیم اساسی برنامهنویسی شیگرا (OOP) است که به معنی توانایی یک شی یا متد برای رفتار به شکلهای مختلف است. در PHP، پلیمورفیسم به این معنی است که میتوان از یک رابط مشترک (interface) یا یک کلاس پایه (parent class) برای تعریف رفتارهای مختلف در کلاسهای مشتق (child classes) استفاده کرد. پلی مرفیسم یکی از مهم ترین موضوعات OOP (Object Oriented Programming) هست که به عنوان یک برنامه نویس بک اند باید اون رو بلد باشید و بتونید در پروژه هاتون ازش استفاده کنید. در مرحله اول بهتون بگم اصلا این موضوعات سخت نیست درک کردنشون و به راحتی متوجه آن میشید.
مفهوم اصلی
پلیمورفیسم به شما اجازه میدهد که:
- از متدهای یکسان استفاده کنید، اما در هر کلاس به شکل خاصی پیادهسازی شوند.
- کد خود را انعطافپذیر و قابل توسعه کنید.
مثال واقعی با Interface ها
خب فرض کنید یک interface به نام Shape داریم که اشکال های ریاضی ازش پیروی میکنند:
interface Shape
{
public function calculateArea();
}
بعد از اینکه یک اینترفیس درست کردیم میایم کلاس هایی که نیاز داریم رو درست میکنیم مثل مربع (Square) و دایره (Circle) و برای هر دو کلاس از این اینترفیس استفاده میکنیم:
class Circle implements Shape
{
public function __construct(private int $radius) {}
public function calculateArea()
{
return pi() * $this->radius * $this->radius;
}
}
class Square implements Shape
{
public function __construct(private int $side) {}
public function calculateArea()
{
return $this->side * $this->side;
}
}
در اینجا اگه دقت کرده باشید ما یک متدی به نام "()calculateArea
" داریم که محاسبات انجام میده (هر کلاس به روش خودش محاسبه انجام میشه):
$circle = new Circle(5);
echo $circle->calculateArea(); // Outputs the area of the circle
$square = new Square(4);
echo $square->calculateArea(); // Outputs the area of the square
خب حالا میبینید که خیلی راحت تونستیم مقدار محاسبات اون ها چاپ کنیم و رفتار یکسانی دارند، حالا شما میتونید با استفاده از اینترفیسی که درست کردیم روی پارامتر های ورودی کلاس های دیگه که نیاز دارید بزارید و از اون جایی که رفتار ها یکسان هست به راحتی عملیات پیدا میکنید بدون هیچ نگرانی.
نکته: اگه دقت کنید الان ما جای این دو کلاس باهم عوض کنیم بازم یک رفتار دارند!
مثال واقعی با Abstract ها
ما میتونیم همین کارو با استفاده از abstract ها پیاده سازی کنیم:
// Shape.php
abstract class Shape
{
abstract public function calculateArea();
}
// Circle.php
class Circle extends Shape
{
public function __construct(private int $radius) {}
public function calculateArea()
{
return pi() * $this->radius * $this->radius;
}
}
// Square.php
class Square extends Shape
{
public function __construct(private int $side) {}
public function calculateArea()
{
return $this->side * $this->side;
}
}
همینطور شما میتونید به عنوان پارامتر کلاس اصلی درنظر بگیرید، قبلا هم بهش اشاره داشتم:
function printArea(Shape $shape)
{
echo "Area: " . $shape->calculateArea() . PHP_EOL;
}
// Creating instances of Circle and Square
$circle = new Circle(5);
$square = new Square(4);
// Using polymorphism to calculate and print the area
printArea($circle); // Outputs the area of the circle
printArea($square); // Outputs the area of the square
در اینجا شما به عنوان پارامتر یک Shape نیاز دارید و کلاس های Square و Circle که از این کلاس پیروی کردند میتونیم به عنوان پارامتر بهش پاس بدیم.
مزایای پلیمورفیسم
- کاهش وابستگی کدها: میتوانید از یک رابط یا کلاس پایه استفاده کنید بدون نگرانی از نوع دقیق کلاس.
- افزایش انعطافپذیری: میتوانید به راحتی کلاسهای جدیدی اضافه کنید که رفتارهای مختلفی را پیادهسازی میکنند.
- کد قابل نگهداریتر: تغییرات در کلاسهای خاص تأثیری بر کلاسهای دیگر ندارد.
اولین نفر باش که نظر ثبت میکنی :) یعنی یه کامنت به ما نمیرسه 😁