как создать экземпляр объекта, даже если не все параметры передаются в конструктор - PullRequest
0 голосов
/ 16 января 2020

Я пытаюсь сделать возможным создание экземпляра объекта, даже если я ввожу один параметр из двух.

Вот что я сделал:

class BMW implements iCars
{
  private $_price;
  private $_weight;

  function __construct($price, $weight)
  {
    $this->_price = $price;
    $this->_weight = $weight;

    if ($weight === null) {
        $weight = "4242";
    }
  }

  function setPrice()
  {
    return $this->_price;
  }
  function setWeight()
  {
    return $this->_weight;
  }
  function getPrice()
  {
    return $this->_price;
  }
  function getWeight()
  {
    return $this->_weight;
  }
}

I нужно иметь возможность создать экземпляр, если я укажу вес и цену в параметрах или просто цену.

Ответы [ 2 ]

3 голосов
/ 16 января 2020

Вы можете просто добавить null для аргумента при создании объекта, например:

$car = new BMW(123, null);

Демо: http://sandbox.onlinephpfunctions.com/code/46cd960eff0530c0d0a3a384fe426cae4022523f

или вы можно изменить определение конструктора, чтобы сделать второй параметр необязательным (с помощью аргументы параметра по умолчанию ):

function __construct($price, $weight = null)
{
    $this->_price = $price;
    $this->_weight = $weight;
    //...
}

//....

$car = new BMW(123);

Демо: http://sandbox.onlinephpfunctions.com/code/27970a41be1ff259d112a8a1a5db0d25c940092d


NB дополнительное примечание: я подозреваю, что

$weight = "4242";

в операторе if в конструкторе, вероятно, не то, что вы предполагали - он будет только устанавливать входящую переменную $weight, которая будет потерян, когда конструктор заканчивает. Я полагаю, вы действительно намеревались установить свойство объекта, например,

$this->_weight = 4242;

(обратите внимание, я также удалил кавычки, так как это число, а не строка.)

2 голосов
/ 16 января 2020

Попробуйте изменить конструктор на:

function __construct($price, $weight = null)
{
    $this->_price = $price;
    $this->_weight = $weight;



    if ($weight === null) {
        $weight = "4242";
    }
}

При добавлении = null к параметрам будет установлено значение по умолчанию, если вы не передадите значение.

Итак $car = new BMW(25000); будет работать без ошибок.

Редактировать : Если вы всегда хотите 4242 в качестве значения по умолчанию, вы можете добавить это в сигнатуру конструктора.

function __construct($price, $weight = "4242")
{...}

$car = new BMW(123);
echo $car->getWeight();
//Will echo 4242

Вы if ($weight == null) больше не понадобится.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...