متد Constructor و Destructor در php oop

متد کانستراکتور به صورت اتوماتیک هنگام ایجاد نمونه ای از آبجکت اجرا میشود.
یعنی هنگامی که کلاسی را تعریف میکنید.
دو راه برای نوشتن کانستراکتور داریم:
روش اول : استفاده از متد __constructor()
روش دوم:استفاده از متدی با نام کلاس مثلا نام کلاس شما a هست شما داخل کلاس متد a را تعریف می کنید.
به کلاس زیر دقت نمایید :

class FactorialOrg {
  private $result = 1; // you can initialize directly outside
  private $number;
  function __construct($number) {
    $this->number = $number;
    for ($i = 2; $i <= $number; $i++) {
      $this->result *= $i;
    }
  }
  public function showResult() {
    echo "Factorial of {$this->number} is {$this->result}. ";
  }
}

در کلاس بالا مقدار فاکتوریل یک عدد را حساب می کنیم
هنگام ایجاد یک نمونه (شی ) از کلاس بالا به دلیل اینکه با ایجاد نمونه متد کانستراکتور اجرا میشود , پس ما باید هنگام ایجاد نمونه آرگومان (متغییر) را تعریف کنیم

$fact = new FactorialOrg (5);
$fact->showResult();

سوالی که مطرح میشه
اینه که اگر از دوروش بالا به طور همزمان استفاده کنیم کدوم اجرا میشه :

class Factorial {
  private $result = 1;
  private $number;
  function __construct($number) {
    $this->number = $number;
    for ($i = 2; $i <= $number; $i++) {
      $this->result*=$i;
    }
    echo "__construct() executed. " . '<br/>';
  }
  function factorial($number) {
    $this->number = $number;
    for ($i = 2; $i <= $number; $i++) {
      $this->result*=$i;
    }
    echo "factorial() executed. " . '<br/>';
  }
  public function showResult() {
    echo "Factorial of {$this->number} is {$this->result}. ";
  }

هم _constructor و هم متد همنام کلاس را تعریف کردیم:
پس از ایجاد نمونه از کلاس بالا متوجه خواهید شد که _constructor ابتدا اجرا میشود
متد بعدی متد Destructor می باشد که دقیقا عکس constructor می باشد
یعنی هنگامی که کلاس بسته می شود به صورت اتوماتیک اجرا می شود

class FactorialFake {
  private $result = 1;
  private $number;
  function __construct($number) {
    $this->number = $number;
    for ($i = 2; $i <= $number; $i++) {
      $this->result*=$i;
    }
    echo "__construct() executed. " . '<br/>';
  }
  function factorial($number) {
    $this->number = $number;
    for ($i = 2; $i <= $number; $i++) {
      $this->result*=$i;
    }
    echo "factorial() executed. " . '<br/>';
  }
  public function showResult() {
    echo "Factorial of {$this->number} is {$this->result}. ";
  }
  function __destruct() {
    echo " Object Destroyed.";
  }
}

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

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