Я выполняю чужой код, и они постоянно избегают избегать их ключей массива.
Например:
$ row_rsCatalogsItems [Имя]
вместо
$ row_rsCatalogsItems [ 'Name']
поэтому я постоянно делаю крошечные изменения ко всему, что касаюсь только для того, чтобы справиться с этой биткой лень. Но теперь мне интересно, есть ли еще большая польза для этого. Я получаю, что он проверяет константы перед тем, как поменять строку (я ненавижу это поведение в php при работе с константами, так как они проверяют на истинность, даже если не определены), но я не уверен, что даже это стоит того, меняя все множество, много экземпляров констант-как-массива-ключей.
Предложения?
Существует более чем одна веская причина.
Делать
error_reporting(E_ALL);
в начале вашего скрипта, и вы сразу увидите все причины.
Забава в стороне, на практике вы могли бы подумать, что это то, что я мог бы избежать. И ты можешь быть прав. Но, как разработчик, вы должны нарисовать линию где-то о том, что является приемлемым взломом, и что является причиной словесного оскорбления. Для меня это особое поведение выходит за рамки этой линии.
Самая непосредственная причина, по которой это плохо, заключается в том, что она делает error_reporting(E_ALL)
непригодной для использования. И хорошая практика разработки требует, чтобы сообщались все ошибки, эти уведомления настраивают вас для более сложных кодов и более сложных сеансов отладки.
Обновление: я не рассматривал вопрос о практическом решении существующей ситуации, поэтому я хотел бы сделать это в вашей обуви:
\[(a-zA-Z_-)\]
на ['$1']
(или что-то подобное). Если количество замещений равно количеству уведомлений в файле журнала, вы являетесь золотым. В противном случае попробуйте разделить и покорить, пока не увидите, где не работает регулярное выражение. Это не технически правильно делать так. Вероятно, вы должны использовать одинарные кавычки. Он будет использовать меньше циклов процессора и памяти для запуска кода, если вы их исправите. Вы заметите разницу, даже если 1000 из них зафиксированы в одном файле? Возможно нет.
Если вы исправите это, это будет правильно и не будет иметь предупреждений или уведомлений, а не для скорости или использования памяти.
Я бы добавил цитаты. Если ничего другого, убедитесь, что:
Сказав это, я понимаю, что время программиста ценно. Таким образом, вы можете опционально отказаться от ленивого кодера и использовать регулярное выражение, например следующее:
$input = '$row_rsCatalogsItems[Name]'; $str = preg_replace('/(\$[a-zA-Z_]+\[)([a-zA-Z]+)(\])/', '${1}\'${2}\'${3}', $input); echo $str;
(Возможно, вы захотите выполнить изменения, используя это выражение, чтобы убедиться, что вы меняете правильные вещи;))