2009-11-11 17 views
3

Je veux quelques constructeurs définis dans une classe PHP. Cependant, mon code pour les constructeurs est actuellement très similaire. Je préférerais ne pas répéter le code si possible. Existe-t-il un moyen d'appeler d'autres constructeurs à l'intérieur d'un constructeur dans une classe php? Existe-t-il un moyen d'avoir plusieurs constructeurs dans une classe PHP? Je sais que je pourrais résoudre cela en créant par exemple certaines méthodes Init. Mais y a-t-il un moyen de contourner cela?Appel d'un autre constructeur à partir d'un constructeur en PHP

Répondre

5

Vous ne pouvez pas surcharger des fonctions comme celle de PHP. Si vous faites ceci:

class A { 
    public function __construct() { } 
    public function __construct($a, $b) { } 
} 

votre code ne sera pas compilé avec une erreur que vous ne pouvez pas redéclarer __construct().

La méthode consiste à utiliser des arguments facultatifs.

function __construct($service, $action, $security = '') { 
    if (empty($service) || empty($action)) { 
    throw new Exception("Both service and action must have a value"); 
    } 
    $this->$mService = $service; 
    $this->$mAction = $action; 
    $this->$mHasSecurity = false; 
    if (!empty($security)) { 
    $this->$mHasSecurity = true; 
    $this->$mSecurity = $security; 
    } 
} 
3

Et si vous avez vraiment besoin d'avoir des arguments complètement différents, utilisez le modèle Factory.

class Car {  
    public static function createCarWithDoors($intNumDoors) { 
     $objCar = new Car(); 
     $objCar->intDoors = $intNumDoors; 
     return $objCar; 
    } 

    public static function createCarWithHorsepower($intHorsepower) { 
     $objCar = new Car(); 
     $objCar->intHorses = $intHorsepower; 
     return $objCar; 
    } 
} 

$objFirst = Car::createCarWithDoors(3); 
$objSecond = Car::createCarWithHorsePower(200);