Зачем нужен метод конструктора, если вы можете присвоить значения переменным? - PullRequest
1 голос
/ 29 мая 2010

Я только изучаю PHP, и я не понимаю, какова цель метода __construct ()?

Если я смогу сделать это:

class Bear {
    // define properties
    public $name = 'Bill';
    public $weight = 200;

    // define methods
    public function eat($units) {
        echo $this->name." is eating ".$units." units of food... <br />";
        $this->weight += $units;
    }
}

Тогда зачем это вместо конструктора? :

class Bear {
    // define properties
    public $name;
    public $weight;

    public function __construct(){

        $this->name = 'Bill';
        $this->weight = 200;
    }
    // define methods
    public function eat($units) {
        echo $this->name." is eating ".$units." units of food... <br />";
        $this->weight += $units;
    }
}

Ответы [ 2 ]

3 голосов
/ 29 мая 2010

Потому что конструкторы могут выполнять более сложную логику, чем то, что вы можете делать при инициализации переменных. Например:

class Bear {
  private $weight;
  private $colour;

  public __construct($weight, $colour = 'brown') {
    if ($weight < 100) {
      throw new Exception("Weight $weight less than 100");
    }
    if (!$colour) {
      throw new Exception("Colour not specified");
    }
    $this->weight = $weight;
    $this->colour = $colour;
  }

  ...
}

Конструктор не обязателен, но может выполнять произвольный код.

0 голосов
/ 29 мая 2010

Вы можете дать динамические переменные вашему классу:

с:

public function __construct(name, amount){

    $this->name = name;
    $this->weight = amount;
}

Вы можете использовать свой класс для "bill" и "joe" и использовать разные значения сумм.

Также вы можете убедиться, что ваш класс всегда будет иметь все, что ему нужно, например, работающее соединение с базой данных: ваш конструктор должен всегда требовать все потребности:

public function __construct(database_connection){
[...]
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...