Давайте возьмем пример модели производителя/автомобиля. Модель имеет конкретного производителя. Итак, скажем, модели «Punto», «500», «Panda» всегда были производителями «Fiat».В разных классах всегда есть пример для совместного использования
Если модели являются по одному классу, а изготовитель представляет собой экземпляр класса, то что является самым чистым/лучшим решением для получения моделей, подключенных к производителю без наличия нескольких экземпляров класса производителя. Установка их через конструктор очевидна, потому что модель никогда не может измениться с того, кто ее производит.
Давайте покажем мою проблему в упрощенном примере коды:
class Manufacturer
{
protected $name;
public function __construct($name)
{
$this->name = $name;
}
}
abstract class Car
{
protected $manufacturer;
public function __construct(Manufacturer $manufacturer)
{
$this->manufacturer = $manufacturer;
}
abstract public function getModel();
public function getManufacturer()
{
return $this->manufacturer;
}
}
class ModelA extends Car
{
public function getModel()
{
return 'A';
}
}
class ModelB extends Car
{
public function getModel()
{
return 'B';
}
}
// The manufacturer instance
$manufacturerC = new Manufacturer('C');
// Setting the manufacturer for the models is obvious
// because they always get manufactured from the manufacturer "C"
// and never from a manufacturer "X"
$modelA = new ModelA($manufacturerC);
$modelB = new ModelB($manufacturerC);
Я бы передал ссылку на экземпляр, используя & –
@RonDadon, вот как работает мой пример кода. Но установка ссылки на производителя для моделей очевидна, потому что она всегда будет одинаковой. – TiMESPLiNTER
Если вы используете ссылку, то изменение в изготовителе будет отражать всю модель, которая зависит от нее. Как вы его передаете, проходит экземпляр экземпляра, поэтому изменения в самом экземпляре не будут отражаться в «автомобилях». –