public function testAllPartsBuiltWhenCarStarted()
 {
     $muscleCarFactory = new MuscleCarPartsFactory();
     $car = new Car($muscleCarFactory);
     $car->start();
     $this->assertInstanceOf('V8Engine', $car->getEngine(), "MuscleCar gets correct V8Engine");
     $this->assertInstanceOf('MusclePassengerCompartment', $car->getPassengerCompartment(), "MuscleCar gets correct MusclePassengerCompartment");
 }
    }
    public function getEngine()
    {
        return $this->engine;
    }
}
class Engine
{
    private $engineCapacity;
    private $engineSerialNumber;
    public $car;
    function __construct($engineCapacity, $engineSerialNumber, $car)
    {
        $this->engineCapacity = $engineCapacity;
        $this->engineSerialNumber = $engineSerialNumber;
        $this->car = $car;
    }
    public function getEngineCapacity()
    {
        return $this->engineCapacity;
    }
    public function getEngineSerialNumber()
    {
        return $this->engineSerialNumber;
    }
}
$car = new Car('VW', 2010, $engine, 500, '23213ekdsdlkar');
$engine =& $car->getEngine();
var_dump($car, $engine);
unset($car);
var_dump($car, $engine);