Как решить проблему возвращаемых объектов? Нужно вывести имя клиента платежа. Возьмем такой пример:class Payment
{
/**
* @var Customer|null
*/
protected $customer;

public function getCustomer()
{
return $this->customer;
}

public function setCustomer(Customer $customer)
{
$this->customer = $customer;
}
}
class Customer
{
public function getFirstname()
{
return 'Name';
}
}/** @var Payment $payment */
echo $payment->getCustomer()->getFirstname();
Как вы могли догадаться, бывает так что клиента в платеже нет. Был удален, например. В этом случае возникнет ошибка потому что обращение к null.
Можно создать метод с проверкой (или просто условие):public function printCustomerFirstname(Payment $payment)
{
if ($payment->getCustomer()) {
echo $payment->getCustomer()->getFirstname();
}
}
/** @var Payment $payment */
printCustomerFirstname($payment);
Но как бы это решил "синьер"?
Возможно что в 2018 уже выработался какой-то best practice.

21 Авг 2019 в 06:59
221 +1
1
Ответы
1

Для решения проблемы возвращаемых объектов и избежания ошибок при обращении к null объекту можно использовать Null Object Pattern.

Этот паттерн предполагает создание специального объекта, который представляет отсутствие значения. Например, можно создать класс NullCustomer, который реализует тот же интерфейс, что и Customer, но возвращает дефолтное значение (например, пустую строку) вместо реальных данных.

Когда объект Customer отсутствует в платеже, вместо null можно использовать экземпляр NullCustomer, который не вызовет ошибку при обращении к его методам.

Таким образом, можно изменить метод getCustomer() в классе Payment таким образом, чтобы он всегда возвращал объект типа Customer (либо реального, либо NullCustomer) вместо null.

Это позволит избежать ошибок при обращении к методам объекта Customer и обеспечит более защищенную работу кода.

20 Апр 2024 в 13:10
Не можешь разобраться в этой теме?
Обратись за помощью к экспертам
Гарантированные бесплатные доработки в течение 1 года
Быстрое выполнение от 2 часов
Проверка работы на плагиат
Поможем написать учебную работу
Прямой эфир