PHP kurucusundan başka bir kurucu çağırmadan

2 Cevap php

Ben bir PHP sınıfı tanımlanmış birkaç Kurucular istiyorum. Ancak, kurucular için benim kod şu anda çok benzer. Mümkünse ben değil kod tekrar olmaz. Bir php sınıfta bir yapıcısı içinde diğer Kurucular çağırmak için bir yolu var mı? Bir PHP sınıfı birden Kurucular için bir yolu var mı?

function __construct($service, $action)
{
	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;
}
function __construct($service, $action, $security)
    {
    	__construct($service, $action); // This is what I want to be able to do, so I don't have to repeat code

    	if(!empty($security))
    	{
    		$this->$mHasSecurity = true;
    		$this->$mSecurity = $security;
    	}
    }

Ben örneğin bazı Init yöntemler oluşturarak bu çözebileceğini biliyoruz. Ama bu etrafında bir yolu var mı?

2 Cevap

PHP bu gibi işlevleri aşırı olamaz. Bunu yaparsanız:

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

senin kod redeclare edilemez bir hata ile derlenmeyecektir __construct().

Bunu yapmanın yolu, isteğe bağlı argümanlar ile.

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

Ve gerçekten, tamamen farklı argümanlar var Fabrika desen kullanmak zorunda.

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