برنامه نویسیزبان PHP

برنامه نویسی شی گرا در PHP

برنامه نویسی شی گرا یا Object-Oriented Programming که به اختصار OOP نیز نامیده می‌شود، شیوه‌ای از برنامه‌نویسی بر پایه‌ی آبجکت یا شی است. این شیوه به برنامه نویسان امکان می دهد تا کدهایی تمیز، با قابلیت نگهداری بالاتر و اشکال زدایی آسان‌تر بنویسند. شیوه برنامه نویسی OOP با مفاهیم دنیای واقعی بسیار شبیه است؛ به عنوان مثال، عملکرد مغز به شیوه‌ی شی گرایانه است. مغز اطلاعات را از محیط دریافت می‌کند و پس از پردازش آن‌ها، واکنش مناسب نشان می‌دهد. در ادامه، با مفاهیم شی گرایی در PHP و مثال‌های مختلف آن، آشنا خواهیم شد. همراه ما باشید.

برنامه‌نویسی شی گرا، از مزایای بسیاری برخوردار است. در این روش، کد به بخش‌های کوچک‌تر تقسیم می‌شود و به صورت سازماندهی شده‌ای مدیریت می‌گردد. همچنین، نیازی به نوشتن کدهای تکراری نیست و می‌توان از کدهای قبلی استفاده کرد. در ضمن، برنامه در این روش دارای امنیت بیشتر و عملکرد بهتری است. اشکال زدایی و عیب‌یابی نیز با استفاده از این روش آسان و سریع‌تر می‌باشد.

شی گرایی در PHP

در اینجا، مفاهیم شیءگرایی در PHP به شما آموزش داده می‌شود و سپس به بررسی مثال‌هایی در مورد هر کدام از آن‌ها پرداخته می‌شود.

کلاس (Class) – یک نوع داده‌ی تعریف شده توسط برنامه‌نویس است که شامل توابع و داده‌های محلی است. می‌توان یک کلاس را به عنوان الگویی برای ساخت نمونه‌های بسیاری از همان نوع (یا کلاس) شیء در نظر گرفت.

شیء (Object) – شیء، یک نمونه منفرد از ساختار داده است که توسط یک کلاس تعریف می‌شود. کلاس یکبار تعریف می‌شود و سپس شما می‌توانید آبجکت‌های دلخواه خود را با استفاده از آن تعریف کنید. شیء به عنوان نمونه نیز شناخته می‌شود.

متغیرهای عضو (Member Variable) – متغیرهایی هستند که در داخل یک کلاس تعریف شده‌اند. این داده‌ها در خارج از کلاس قابل دسترسی نیستند و فقط از طریق توابع عضو به آن‌ها دسترسی دارید. زمانی که یک شیء ایجاد می‌شود، به این متغیرها صفت شیء گفته می‌شود.

توابع عضو (Member function) – تابعی است که در داخل یک کلاس تعریف شده است و برای دسترسی به داده‌های شیء استفاده می‌شود.

وراثت (Inheritance) – وقتی یک کلاس با به ارث بردن عملکرد موجود در یک کلاس پدر تعریف می‌شود، آن را وراثت می‌نامند. یک کلاس فرزند، تمام یا بخشی از توابع و متغیرهای کلاس والد را به ارث می‌برد و همچنین می‌تواند توابع و متغیرهای منحصر به فرد خود را داشته باشد.

کلاس والد (Parent class) – کلاسی که یک کلاس دیگر از آن به ارث می‌برد، کلاس والد نامیده می‌شود. به این کلاس، کلاس پایه یا فوق کلاس نیز گفته می‌شود.

کلاس فرزند (Child Class) – کلاسی است که از یک کلاس دیگر به عنوان کلاس والد بهره می‌برد. به این کلاس، زیرکلاس یا کلاس مشتق نیز گفته می‌شود.

چندریختی (Polymorphism) – یک مفهوم شی گرایی است که در آن می‌توان از یک تابع برای اهداف مختلف استفاده کرد. به عنوان مثال، تابع با نام یکسان باقی می‌ماند اما تعداد مختلفی از آرگومان‌ها را می‌گیرد و می‌تواند کار متفاوتی انجام دهد.

سربارگذاری (Overloading) – نوعی چندریختی است که در آن برخی یا همه‌ی عملگرها بسته به نوع آرگومان‌های خود پیاده سازی‌های مختلفی دارند. توابع مشابه نیز می‌توانند با اجراهای متفاوت سربارگذاری شوند.

تجرید داده (Data Abstraction) – تجرید به برنامه‌نویس کمک می‌کند تا جزییات پیاده‌سازی برنامه را از کاربران پنهان کند. تجرید باعث می‌شود تا تنها عملیاتی که با شی‌های دیگر برنامه ارتباط دارند، نمایش داده شوند. متدهای تجرید می‌توانند بدنه داشته باشند یا نداشته باشند.

اینترفیس (Interface) – اینترفیس همانند تجرید است، با این تفاوت که متدهای آن بدنه ندارند و کلاسی که اینترفیس را پیاده‌سازی می‌کند، ملزم به بازنویسی تمامی متدهای کلاس والد است. شباهت اینترفیس و تجرید در این است که از هیچ کدام نمی‌توان یک شی‌ء ایجاد کرد.

کپسوله سازی (Encapsulation) – به مفهومی گفته می‌شود که در آن همه‌ی داده‌ها و توابع عضو را با هم ترکیب می‌کنیم تا یک شیء جدید را تشکیل دهیم. در کپسوله سازی، دسترسی به اشیاء با استفاده از سطح بندی محدود می‌شود.

سازنده (Constructor) – به نوع خاصی از تابع گفته می‌شود که هر زمان یک آبجکت از یک کلاس تشکیل شود، به طور خودکار فراخوانی می‌شود.

مخرب (Destructor) – به نوع خاصی از تابع گفته می‌شود که هر زمان که یک آبجکت حذف شود یا از دامنه خارج شود، به طور خودکار فراخوانی می‌شود.

class در PHP چیست؟

کلاس در PHP با استفاده از کلمه‌ی class تعریف می‌شود و پس از آن نام کلاس و یک جفت پرانتز {} قرار داده می‌شود.

در زیر، یک کلاس به نام Fruit با دو خصوصیت (name و color) و دو تابع (set_name و get_name) برای تنظیم و گرفتن خصوصیت name ایجاد شده است:

class Fruit {
  public $name;
  public $color;

  function set_name($name) {
    $this->name = $name;
  }

  function get_name() {
    return $this->name;
  }
}

در این کد، خصوصیت name و color به صورت عمومی (public) تعریف شده‌اند و به هر دو مقداری می‌توان داد. همچنین، دو تابع set_name و get_name برای تنظیم و گرفتن خصوصیت name تعریف شده‌اند. توابعی که با نام __construct تعریف می‌شوند، به عنوان سازنده کلاس شناخته می‌شوند و هنگام ایجاد یک شیء از کلاس، به صورت خودکار فراخوانی می‌شوند. به مانند همین نحو، توابعی با نام __destruct که در داخل کلاس تعریف شده‌اند، به عنوان مخرب کلاس شناخته می‌شوند و هنگامی که یک شیء از کلاس حذف یا از دسترس خارج می‌شود، به صورت خودکار فراخوانی می‌شوند.

object در PHP چیست؟

در رابطه با ایجاد آبجکت‌ها، می‌توان گفت که در یک کلاس، قابلیت تولید چندین آبجکت وجود دارد. هر آبجکت، تمام ویژگی‌ها و متدهایی که در کلاس تعریف شده‌اند را داراست، با این تفاوت که مقادیر مختلفی برای ویژگی‌ها به آن‌ها اختصاص داده شده است. برای تعریف یک آبجکت جدید از یک کلاس، از کلمه‌ی کلیدی “new” استفاده می‌شود. به عنوان مثال، در کد PHP زیر، “apple”و”banana”و”banana” نمونه‌های آبجکتی هستند که از کلاس Fruit ایجاد شده‌اند.

<?php
class Fruit {
  // Properties
  public $name;
  public $color;
  // Methods
  function set_name($name) {
    $this->name = $name;
  }
  function get_name() {
    return $this->name;
  }
}
$apple = new Fruit();
$banana = new Fruit();
$apple->set_name('Apple');
$banana->set_name('Banana');
echo $apple->get_name();
echo "<br>";
echo $banana->get_name();
?>

در مثال زیر، دو متد اضافی برای تنظیم و بازیابی ویژگی “color$” به کلاس Fruit افزوده شده است.

<?php
class Fruit {
  // Properties
  public $name;
  public $color;
  // Methods
  function set_name($name) {
    $this->name = $name;
  }
  function get_name() {
    return $this->name;
  }
  function set_color($color) {
    $this->color = $color;
  }
  function get_color() {
    return $this->color;
  }
}
$apple = new Fruit();
$apple->set_name('Apple');
$apple->set_color('Red');
echo "Name: " . $apple->get_name();
echo "<br>";
echo "Color: " . $apple->get_color();
?>

فراخوانی توابع عضو در PHP

پس از ایجاد آبجکت‌ها، شما قادر خواهید بود توابع عضو مربوط به هر شیء را فراخوانی کنید. توابع عضو فقط قادر به پردازش و دسترسی به متغیرهای عضو از شیء مرتبط با آن‌ها هستند.

برای مثال، در کد زیر:

<?php
   class Books {
      /* Member variables */
      var $price;
      var $title;
      /* Member functions */
      function setPrice($par){
         $this->price = $par;
      }
     
      function getPrice(){
         echo $this->price ."<br/>";
      }
    
      function setTitle($par){
         $this->title = $par;
      }
      function getTitle(){
         echo $this->title ." <br/>";
      }
   }
?>

پس از آن، سه شیء مستقل با سه نوع کتاب مختلف ایجاد خواهیم کرد.

$physics = new Books;
$maths = new Books;
$chemistry = new Books;

در کد زیر، با فراخوانی توابع عضو، روش ست کردن عنوان و قیمت برای هر یک از سه کتاب نشان داده شده است.

$physics->setTitle( "Physics for High School" );
$chemistry->setTitle( "Advanced Chemistry" );
$maths->setTitle( "Algebra" );
$physics->setPrice( 10 );
$chemistry->setPrice( 15 );
$maths->setPrice( 7 );

در حال حاضر، برای دریافت مقادیر ست شده در مثال فوق، توابع عضو دیگری فراخوانی می‌شوند.

constructor در PHP

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

function __construct( $par1, $par2 ) {
   $this->title = $par1;
   $this->price = $par2;
}

در حال حاضر، فراخوانی تابع set برای ست کردن قیمت و عنوان لازم نیست. این دو متغیر عضو، فقط در زمان ایجاد شی از کلاس، می‌توانند مقدار

$physics = new Books( "Physics for High School", 10 );
$maths = new Books ( "Advanced Chemistry", 15 );
$chemistry = new Books ("Algebra", 7 );
/* Get those set values */
$physics->getTitle();
$chemistry->getTitle();
$maths->getTitle();
$physics->getPrice();
$chemistry->getPrice();
$maths->getPrice();

همچنین توابع destructor در زبان برنامه‌نویسی PHP مشابه یک تابع سازنده، می‌توانید با استفاده از ()destruct__ یک تابع مخرب را تعریف کنید. به وسیله این تابع، شما می‌توانید تمام منابع را آزاد کنید.

inheritance در PHP

توارث (Inheritance) در PHP به شما اجازه می‌دهد که یک کلاس جدید را از یک کلاس موجود (کلاس پدر) ایجاد کنید و ویژگی‌ها و توابع آن را به کلاس فرزند منتقل کنید.

به عنوان مثال، فرض کنید که ما یک کلاس سرگرمی داریم به نام Entertainment که خصوصیاتی مانند نام، شرح، قیمت و تعداد قابلیت‌های بازی را دارد:

class Entertainment {
   public $name;
   public $description;
   public $price;
   public $numFeatures;

   public function __construct($name, $description, $price, $numFeatures) {
      $this->name = $name;  
      $this->description = $description;
      $this->price = $price;
      $this->numFeatures = $numFeatures;
   }

   public function display() {
      echo "Name: " . $this->name . "
"; echo "Description: " . $this->description . "
"; echo "Price: $" . $this->price . "
"; echo "Number of Features: " . $this->numFeatures . "
"; } }

حالا فرض کنید که ما می‌خواهیم یک کلاس ویدیو بازی ایجاد کنیم که از کلاس Entertainment توارث کند. برای این کار، ما کلاس ویدیو بازی را به صورت زیر تعریف می‌کنیم:

class VideoGame extends Entertainment {
   public $platform;

   public function __construct($name, $description, $price, $numFeatures, $platform) {
      parent::__construct($name, $description, $price, $numFeatures);
      $this->platform = $platform;
   }

   public function display() {
      parent::display();
      echo "Platform: " . $this->platform . "
"; } }

در کلاس فرزند VideoGame، ما ویژگی جدید platform را اضافه کرده‌ایم و تابع __construct() را Override کرده‌ایم تا کلاس پدر Entertainment را صدا بزند و مقادیر ورودی خود را به آن انتقال دهد. همچنین، ما تابع display() را هم Override کرده‌ایم تا ابتدا تابع display() کلاس پدر را صدا بزند و سپس ویژگی جدید platform را نمایش دهد.

حالا ما می‌توانیم شی از کلاس VideoGame ایجاد کرده و توابع آن را صدا بزنیم:

$game = new VideoGame("GTA V", "Action-adventure game", 59.99, 10, "PS4");
$game->display();

این کد نتیجه زیر را به ما خواهد داد:

Name: GTA V
Description: Action-adventure game
Price: $59.99
Number of Features: 10
Platform: PS4

سربارگذاری تابع در PHP

در PHP، سربارگذاری تابع (Function Overloading) به شما اجازه می‌دهد که چندین تابع با نام یکسان اما با پارامترهای ورودی متفاوت داشته باشید. در واقع، وقتی یک تابع با پارامترهای مختلف فراخوانی می‌شود، PHP بر اساس نوع و تعداد پارامترها، تابع مناسب را پیدا می‌کند و اجرا می‌کند.

به عنوان مثال، فرض کنید که ما یک کلاس به نام Math داریم که دو تابع جمع و ضرب را دارد. اما ما می‌خواهیم تابع جمع را به گونه‌ای سربارگذاری کنیم که بتواند دو عدد صحیح یا دو رشته را به هم بیفزاید.

class Math {
   public function add($x, $y) {
      return $x + $y;
   }

   public function multiply($x, $y) {
      return $x * $y;
   }

   public function __call($name, $arguments) {
      if ($name == 'add') {
         switch (count($arguments)) {
            case 2:
               return $this->addNumbers($arguments[0], $arguments[1]);
               break;
            case 3:
               return $this->addStrings($arguments[0], $arguments[1], $arguments[2]);
               break;
         }
      }
   }

   private function addNumbers($x, $y) {
      return $x + $y;
   }

   private function addStrings($s1, $s2, $separator) {
      return $s1 . $separator . $s2;
   }
}

در کلاس بالا، ما تابع __call() را override کرده‌ایم تا وقتی یک تابع با نام add با پارامترهای مختلف فراخوانی می‌شود، تابع مناسب را صدا بزند.

برای این کار، ما پارامترهای ورودی را با استفاده از تابع count() شمارش کرده و با آن‌ها انواع مختلف عملیات جمع را انجام می‌دهیم. در اینجا، اگر دو پارامتر ورودی داده شود، تابع addNumbers() به عنوان تابع جمع عددی صدا خواهد شد و اگر سه پارامتر ورودی داده شود، تابع addStrings() به عنوان تابع جمع رشته‌ای صدا خواهد شد.

حالا می‌توانیم از کلاس Math استفاده کنیم و تابع جمع را با پارامترهای مختلف به آن فراخوانی کنیم:

$math = new Math();

// جمع دو عدد
echo $math->add(2, 3) . "
"; // خروجی: ۵ // جمع دو رشته echo $math->add("Hello", "World", " ") . "
"; // خروجی: Hello World

با استفاده از سربارگذاری تابع، ما تابع add() را قابل اجرا با پارامترهای مختلف کرده‌ایم.

انواع سطوح دسترسی کلاس در PHP

در PHP، سه نوع سطح دسترسی برای فیلدها و متودهای یک کلاس تعریف شده است:

  1. public: اگر یک فیلد یا متد به عنوان public تعریف شود، آنگاه این فیلد یا متد در همه جا دسترسی‌پذیر خواهند بود. به این معنی که با نام کلاس و نام فیلد یا متد، می‌توان در هر جای برنامه به آن دسترسی داشت.
  2. protected: اگر یک فیلد یا متد به عنوان protected تعریف شود، آنگاه این فیلد یا متد تنها در کلاس خود و زیر کلاس‌های آن دسترسی‌پذیر خواهند بود. به این معنی که از خارج از کلاس و زیر کلاس‌های آن نمی‌توان به آن دسترسی داشت.
  3. private: اگر یک فیلد یا متد به عنوان private تعریف شود، آنگاه این فیلد یا متد تنها در کلاس خود دسترسی‌پذیر خواهند بود. به این معنی که حتی زیر کلاس‌های آن هم نمی‌توان به آن دسترسی داشت.

برای نمونه، فرض کنید که یک کلاس Person داریم و دو فیلد name و age را در آن تعریف کرده‌ایم. name به عنوان public تعریف شده است، به این معنی که می‌توان از خارج از کلاس به آن دسترسی داشت. اما age به عنوان private تعریف شده است، به این معنی که تنها درون کلاس قابل دسترسی است.

class Person {
    public $name;
    private $age;

    function __construct($name, $age) {
        $this->name = $name;
        $this->age = $age;
    }

    public function getAge() {
        return $this->age;
    }
}

// ساخت یک شی از کلاس Person
$person1 = new Person("John", 25);

// دسترسی به فیلد name (public)
echo $person1->name;  // خروجی: John

// دسترسی به فیلد age (private)
// echo $person1->age;  // خطا: Fatal error: Uncaught Error: Cannot access private property Person::$age

// دسترسی به متد getAge (public)
echo $person1->getAge();  // خروجی: ۲۵

در کد بالا، متد getAge() به عنوان public تعریف شده است، بنابراین می‌توان درون و خارج از کلاس به آن دسترسی داشت. حتی اگر فیلد age به عنوان private تعریف شده باشد، می‌توان با استفاده از متد getAge() به آن دسترسی داشت.

abstract در PHP

در PHP، کلاس‌های abstract کلاس‌هایی هستند که نمی‌توان از آن‌ها شیء ساخت، به عبارت دیگر می‌توان گفت که کلاس abstract یک کلاس انتزاعی است. برای استفاده از این کلاس‌ها، باید آن را به عنوان یک کلاس پایه (base class) برای کلاس‌های دیگر تعریف کرد.

کلاس‌های abstract شامل حداقل یک متد abstract هستند، که هنگام تعریف، اجازه نمی‌دهد تا بدنه (body) متد تعریف شود و فقط امضای متد (signature) تعریف می‌شود. این به معنی این است که هر کلاسی که از یک کلاس abstract ارث ‌بری می‌کند، باید حتماً متد‌های abstract آن کلاس را پیاده‌سازی کند.

برای نمونه، یک کلاس Shape را به عنوان یک کلاس abstract تعریف می‌کنیم، که دو متد abstract به نام‌های getArea() و getPerimeter() را دارد. این کلاس به عنوان یک کلاس پایه برای کلاس‌های هندسی دیگر مانند Rectangle و Circle استفاده خواهد شد.

abstract class Shape {
    abstract public function getArea();
    abstract public function getPerimeter();
}

حالا می‌توانیم از کلاس Shape به عنوان یک کلاس پایه استفاده کنیم و کلاس‌های Rectangle و Circle را برای ارث ‌بری از آن تعریف کنیم:

class Rectangle extends Shape {
    private $width;
    private $height;

    public function __construct($width, $height) {
        $this->width = $width;
        $this->height = $height;
    }

    public function getArea() {
        return $this->width * $this->height;
    }

    public function getPerimeter() {
        return 2 * ($this->width + $this->height);
    }
}

class Circle extends Shape {
    private $radius;

    public function __construct($radius) {
        $this->radius = $radius;
    }

    public function getArea() {
        return pi() * pow($this->radius, 2);
    }

    public function getPerimeter() {
        return 2 * pi() * $this->radius;
    }
}

در کد بالا، کلاس‌های Rectangle و Circle از کلاس Shape ارث ‌بری کرده‌اند و متدهای abstract آن را پیاده‌سازی کرده‌اند. به این ترتیب، هر کلاسی که از کلاس Shape ارث ‌بری کند، باید حتماً متدهای getArea() و getPerimeter() را پیاده‌سازی کند.

حالا می‌توانیم از کلاس‌های Rectangle و Circle برای محاسبه مساحت و محیط یک مستطیل و یک دایره استفاده کنیم:

$rectangle = new Rectangle(4, 5);
echo "Area of Rectangle

آموزش ساخت Interface در PHP

در PHP، interface یک موضوع مهم در برنامه‌نویسی شیءگرا است که به شما اجازه می‌دهد تا تعریف کنید که چه متد‌هایی در یک کلاس باید پیاده‌سازی شوند. برای ساخت یک interface در PHP، از کلیدواژه interface استفاده می‌شود و مانند یک کلاس، می‌تواند شامل متدهای عمومی باشد. اما در interface، تنها امضای متد تعریف می‌شود و هیچ بدنه ای برای آن تعریف نمی‌شود.

به عنوان مثال، فرض کنید که شما می‌خواهید یک interface به نام Animal تعریف کنید که دارای دو متد eat() و sleep() باشد. این interface را به صورت زیر می‌توان تعریف کرد:

interface Animal {
    public function eat();
    public function sleep();
}

حالا می‌توانید از این interface برای تعریف کلاس‌هایی که حیوانات هستند، استفاده کنید. به عنوان مثال، فرض کنید که می‌خواهید یک کلاس برای سگ تعریف کنید. برای این کار، از interface Animal ارث ‌بری می‌کنیم و متدهای آن را پیاده‌سازی می‌کنیم:

class Dog implements Animal {
    public function eat() {
        echo "The dog is eating...";
    }

    public function sleep() {
        echo "The dog is sleeping...";
    }
}

در کد بالا، کلاس Dog از interface Animal ارث ‌بری کرده‌است و متدهای eat() و sleep() را پیاده‌سازی کرده‌است. به این ترتیب، هر کلاسی که از interface Animal ارث ‌بری کند، باید حتماً متدهای eat() و sleep() را پیاده‌سازی کند.

حالا می‌توانیم از کلاس Dog برای ایجاد یک شیء جدید استفاده کنیم و متدهای آن را صدا بزنیم:

$dog = new Dog();
$dog->eat(); // The dog is eating...
$dog->sleep(); // The dog is sleeping...

در کل، interface به عنوان یک قرارداد (contract) بین کلاس‌ها استفاده می‌شود، به این صورت که هر کلاسی که interface را پیاده‌سازی کند، تضمین می‌شود که متدهای آن interface را پیاده‌سازی کرده‌است.

polymorphism در PHP چیست

Polymorphism یکی از مفاهیم کلیدی برنامه‌نویسی شیءگرا است که در PHP نیز پشتیبانی می‌شود. Polymorphism به معنای این است که یک شیء می‌تواند توسط چندین کلاس مختلف با رفتارهای مختلف دستکاری شود. با استفاده از polymorphism در PHP، می‌توانید کدهای خود را بهبود بخشید و کد نویسی خود را ساده‌تر کنید.

برای توضیحات بیشتر، فرض کنید که شما یک interface به نام Shape دارید که شامل یک متد calculateArea() است. سپس دو کلاس Rectangle و Circle دارید که از interface Shape ارث ‌بری می‌کنند و متدهای calculateArea() را به طور مجزا پیاده‌سازی می‌کنند:

interface Shape {
    public function calculateArea();
}

class Rectangle implements Shape {
    private $width;
    private $height;

    public function __construct($width, $height) {
        $this->width = $width;
        $this->height = $height;
    }

    public function calculateArea() {
        return $this->width * $this->height;
    }
}

class Circle implements Shape {
    private $radius;

    public function __construct($radius) {
        $this->radius = $radius;
    }

    public function calculateArea() {
        return pi() * pow($this->radius, 2);
    }
}

حالا می‌توانید از این کلاس‌ها برای محاسبه مساحت یک مستطیل و یک دایره استفاده کنید. به عنوان مثال:

$rectangle = new Rectangle(4, 5);
$circle = new Circle(3);

echo "Area of Rectangle: " . $rectangle->calculateArea() . "\n";
echo "Area of Circle: " . $circle->calculateArea() . "\n";

در کد بالا، شما یک شیء از کلاس Rectangle و یک شیء از کلاس Circle را ایجاد کرده‌اید و سپس متد calculateArea() را روی هر یک از آن‌ها صدا می‌زنید. با این کار، شما از polymorphism در PHP استفاده کرده‌اید، به این صورت که هر دو شیء Rectangle و Circle از interface Shape ارث ‌بری کرده‌اند و متد calculateArea() را پیاده‌سازی کرده‌اند. به عبارت دیگر، هر شیءی که از interface Shape ارث ‌بری کند، مطمئناً قابلیت محاسبه مساحت را خواهد داشت.

در کل، polymorphism در PHP به شما اجازه می‌دهد تا کلاس‌های مختلف را با هم جا به جا کنید و رفتارهای مختلف را با یک نام واحد (مانند متد calculateArea() در مثال بالا) دستکاری کنید.

جمع بندی:

در PHP، شی گرایی یکی از مواردی است که برای نوشتن برنامه‌های حرفه‌ای لازم است و در آن، مزایای بسیاری وجود دارد. از جمله این مزایا، توانایی تبدیل برنامه‌های پیچیده با بخش‌های بزرگ به برنامه‌های ساده‌تر با بخش‌های کوچکتر می‌باشد. همچنین، تغییرات و عیب‌یابی‌ها در این بخش‌ها به راحتی انجام می‌شود. به علاوه، قابلیت استفاده از هر بخش در برنامه‌های دیگر نیز وجود دارد که در نهایت منجر به صرفه‌جویی در زمان می‌شود. در این مقاله، با استفاده از مثال‌هایی از شی گرایی در PHP آشنا شدیم. امیدواریم که این مقاله برای شما مفید بوده باشد و سوالات خود را می‌توانید در بخش نظرات با ما به اشتراک بگذارید.

همچنین این مقالات مرتبط را در بایت گیت بخوانید:

فرمت فایل PHP چیست؟

آموزش PHP: تعریف متغیرها و انواع آن

آموزش PHP: نصب PHP و ساختار و اجرای فایل PHP

پوریا گودرز

پوریا گودرز هستم‌ علاقه مند به مباحث‌ و‌‌ مشکلات مربوط به تکنولوژی و فناوری. همچنین اندک آشنایی در زمینه گرافیک دارم. امیدوارم بتونم مشکلات شما رو در این مباحث حل کنم . انتقادات خود را از بخش نظرات با من در میان بگذارید :)

نوشته های مشابه

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *