@romicohen
Системный Архитектор

Какие подводные камни есть в том, чтобы просто подавить вывод «Trying to get property 'someProp' of non-object» через error_reporting?

Легаси с кучей

PHP Notice - "Trying to get property 'someProp' of non-object"


по идее, если перенастроить error_reporting - все работает.

Но как-то мне такое решение не очень нравится :-)

Какие здесь есть подводные камни, и вообще best practice для подобных ситуаций?

Ставить везде условия - так это задолбаешься проверять объект там или NULL в реале - там этих ошибок может 100500 штук в коде, я пока не знаю.

Есть ли какая-то серебряная пуля для данной ситуации кроме error_reporting?
  • Вопрос задан
  • 56 просмотров
Решения вопроса 1
gzhegow
@gzhegow
aka "ОбнимиБизнесмена"
Подводные камни "отсутствует parent, нельзя сохранить child, полскрипта не сработало, половина сохранилась, теперь надо руками вычищать что корявое, а что нет"

=====

В новой пхп именно из этой проблемы (а точнее стонах по поводу неё) ввели оператор "?->" который вернет NULL если нету, но это про "сразу писать правильно" - а так тоже не бывает. Чаще всего надо "разобраться почему не работает", а не весь старый код перелопатить.

До этого ещё втиралось что NullObject Pattern нужно использовать - то есть любой объект может иметь __get()/__set() и если поля нет - вернет Null, или например если в свойстве должен быть обьект - то когда там NULL туда закидывается обьект с пустыми свойствами, чтоб все работало так же просто всегда NULL отдавало. Кое-кто взял на вооружение - например NullCache() который работает как кеш, но ничего не делает, хотя возвращает всё так же, как будто работает.

Валидация может и решает такие вопросы, но когда вам принесли ужас и он не работает - валидацию бывает непонятно куда совать.

К примеру обьект Car может не иметь поля "fifth-wheel".
Делаем так (new CarDecorator(new Car()))->fifth_wheel где уже есть поле или она умеет возвращать NULL если поля нет.
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
vesper-bot
@vesper-bot
Любитель файрволлов
Best practice - валидировать входящие данные. И да, если что-то хотя бы теоретически возвращает null или ещё какую-то чушь, всегда проверяете, вернулась ли чушь, иначе рано или поздно огребете серьезный баг, и хорошо ещё, если последствия будут всего лишь падением пхп. Серебряной пули, естественно, нет, но есть статические анализаторы, которые могут помочь найти места в коде, где валидации на чушь не хватает.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы