Во-первых, я знаю, что этот вопрос поднимался здесь не раз:
Но чем больше я исправляю все Е _УВЕДОМЛЕНИЯ (, как говорят люди, ), тем больше я замечаю, что:
Возьми пример:
Допустим, вы используете PHP-драйвер MongoDB, и у вас есть объект MongoDate
в переменной класса с именем ts
внутри класса, который представляет одну строку в коллекции в вашей базе данных. Теперь вы получаете доступ к этой переменной, например:$obj->ts->sec
но PHP выдает подгонку (E _NOTICE ), потому что ts
в этом случае не определяется как объект сам по себе, потому что эта конкретная строка не имеет поля ts
. Итак, вы думаете, что это нормально, это желаемое поведение, если оно не установлено, возвращает ноль, и я сам позабочусь об этом вне собственной роботизированной работы интерпретатора (, поскольку вы заключаете это в функцию date()
, которая просто возвращает 1970
, если переменная null
илиnone-object
).
Но теперь, чтобы исправить это УВЕДОМЛЕНИЕ E _как другой разработчик действительно хочет, чтобы я, так как наличие ЛЮБОГО УВЕДОМЛЕНИЯ E _ужасно, и это делает код медленнее, чтобы не делать это в соответствии с ошибками. Итак, я создаю новую функцию в классе $obj
с именем getTs
и даю ей 3 строки буквально для того, чтобы ничего не делать, кроме как проверить, является ли ts
var объектом MongoDate
, и вернуть его, если это так...
ЗАЧЕМ? Разве PHP не может сделать это идеально для меня в своем гораздо более быстром интерпретаторе, чем во время выполнения самого приложения? Я имею в виду везде, где мне приходится добавлять бесполезную выпуклость в свой код, в значительной степени пустые функции для обнаружения переменных, которые я на самом деле просто обрабатываю с помощью собственной способности PHP возвращать null
или проверять их instanceof
, когда мне действительно нужно (когда это жизненно важно для работы и поведения указанной функции )и не заставляйте меня начинать с isset()
я добавил около 300 строк isset()
с, это выходит из-под контроля. Я, конечно, должен заставить это getTs
работать, потому что вы не можете:
class obj{
public $ts = new MongoDate();
}
Мне либо пришлось бы хранить ts
внутри__constructor
(чему я тоже не очень рад, я использую много магии как есть )или использую функцию, чтобы определить, установлено ли оно (, что я и делаю сейчас ).
Я имею в виду, что я понимаю, почему я должен исправлять:
null
варс)Но если вы протестировали свой код и знаете, что он безопасен и будет работать только так, как вам нужно, какой смысл исправлять все ошибки undefined index
или none-object
? Разве добавление набора функций isset()
s и 2 строк в ваш код не является микрооптимизацией -?
После того, как я сделал половину моего сайта, совместимого с E _NOTICE, я заметил, что на самом деле теперь он использует больше ЦП, памяти и времени... так что на самом деле какой смысл иметь дело с каждой ошибкой E _NOTICE, а не только те, которые ARE ошибки?
Спасибо за ваши мысли,