Решение, опубликованное Филом, вероятно, является тем, что вам нужно, в том, что вы не соблюдаете каждый параметр конструктора, даже если его значение не может быть.
Поскольку вы изучаете ООП, я хотел бы предложить вам альтернативное решение. За прошедшие годы я обнаружил, что передача параметров конструктору заканчивается в ситуациях, когда список аргументов становится громоздким. Рассмотрим этот пример (только для демонстрационных целей):
class Car
{
public function __construct($color = NULL, $transmission = NULL, $bodyStyle = NULL, $interior = NULL, $engineType = NULL, $wheelSize = NULL, $radioType = NULL) {
// Do stuff
}
}
С длинным списком аргументов, переданных в arg, КАЖДЫЙ объект, который я создаю, должен проверить, чтобы убедиться, что я передаю значения в правильном порядке, что становится утомительно, если я некоторое время не видел код.
// Example 1
$myCar = new Car('blue', 'automatic', 'sedan', 'leather', 'v6', '18', 'xmBluetooth');
// Example 2
$myCar = new Car('green', 'manual', NULL, NULL, 'v8', NULL);
// Example 3
$myCar = new Car(NULL, NULL, 'sedan', NULL, NULL, NULL, NULL, 'cdPlayer');
Я бы порекомендовал использовать установщики для установки этих значений, а затем каждый раз, когда создается экземпляр объекта, необходимо задавать только необходимые значения без необходимости иметь дело с порядком записи в длинном списке аргументов.
class Car {
protected $color;
protected $bodyStyle;
protected $transmission;
protected $interior;
protected $engineType;
protected $wheelSize;
protected $radioType;
public function setColor($color)
{
$this->color = $color;
}
public function setTransmission($transmission)
{
$this->transmission = $transmission;
}
// etc.
}
// Calling code
$myCar = new Car();
$myCar->setColor('green');
$myCar->setWheelSize('18');
$myCar->setInterior('leather');
$myCar->setEngineType('v6');
$yourCar = new Car();
$yourCar->setColor('black');
Просто о чем подумать.