2010-05-29 5 views
1

Je suis en train d'apprendre PHP, et je suis confus à propos de l'objectif de la méthode __construct()?Pourquoi existe-t-il une méthode constructeur si vous pouvez affecter les valeurs aux variables?

Si je peux le faire:

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; 
    } 
} 

Alors pourquoi le faire avec un constructeur à la place? :

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; 
    } 
} 

Répondre

3

Parce que les constructeurs peuvent faire une logique plus compliquée que ce que vous pouvez faire dans l'initialisation des variables. Par exemple:

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; 
    } 

    ... 
} 

Un constructeur est facultatif mais peut exécuter du code arbitraire.

+0

Ah bien sûr. Logique. Merci! :) – Joel

0

Vous pouvez donner des variables dynamiques à votre classe:

avec:

public function __construct(name, amount){ 

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

Vous pouvez utiliser votre classe pour « Bill » et « Joe » et utiliser des valeurs différentes des montants.

vous pouvez également vous assurer que vous classe sera toujours a tout ce qu'il faut, par exemple une connexion de base de données de travail: Vous constructeur doit toujours demander à tous les besoins:

public function __construct(database_connection){ 
[...] 
} 
Questions connexes