Как решить проблему возвращаемых объектов? Нужно вывести имя клиента платежа. Возьмем такой пример: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.
Для решения проблемы возвращаемых объектов и избежания ошибок при обращении к null объекту можно использовать Null Object Pattern.
Этот паттерн предполагает создание специального объекта, который представляет отсутствие значения. Например, можно создать класс NullCustomer, который реализует тот же интерфейс, что и Customer, но возвращает дефолтное значение (например, пустую строку) вместо реальных данных.
Когда объект Customer отсутствует в платеже, вместо null можно использовать экземпляр NullCustomer, который не вызовет ошибку при обращении к его методам.
Таким образом, можно изменить метод getCustomer() в классе Payment таким образом, чтобы он всегда возвращал объект типа Customer (либо реального, либо NullCustomer) вместо null.
Это позволит избежать ошибок при обращении к методам объекта Customer и обеспечит более защищенную работу кода.
Для решения проблемы возвращаемых объектов и избежания ошибок при обращении к null объекту можно использовать Null Object Pattern.
Этот паттерн предполагает создание специального объекта, который представляет отсутствие значения. Например, можно создать класс NullCustomer, который реализует тот же интерфейс, что и Customer, но возвращает дефолтное значение (например, пустую строку) вместо реальных данных.
Когда объект Customer отсутствует в платеже, вместо null можно использовать экземпляр NullCustomer, который не вызовет ошибку при обращении к его методам.
Таким образом, можно изменить метод getCustomer() в классе Payment таким образом, чтобы он всегда возвращал объект типа Customer (либо реального, либо NullCustomer) вместо null.
Это позволит избежать ошибок при обращении к методам объекта Customer и обеспечит более защищенную работу кода.