Оставив на минутку в стороне, насколько плохими могут быть глобальные переменные, позвольте мне объяснить это более общей проблемой, которую я заметил: использование ключей строкового массива вместо переменных.
Ввод ключей строкового массива может привести к опечаткам, которые бывает сложно обнаружить: $GLOBALS['var1']
против $GLOBALS['varl']
(один против лямда).
Если у вас есть современная IDE, которая выполняет автозаполнение, вам будет полезно объявить global $variable
, а затем, при вводе, вызвать автозаполнение, чтобы получить указание, что вы не сделали опечатку.
Такая современная IDE также может иметь подсветку вхождений, что поможет избежать опечаток (вы можете видеть, появляется ли она рядом), а также перемещаться по вашему коду. Опять же, он будет работать только с переменными, а не с ключами массива.
Если вам нужно использовать глобальные переменные, то использование $GLOBALS
может быть лучше для напоминания вам, откуда взялась переменная, когда вы ищете какое-то значение. Однако может оказаться целесообразным хотя бы определить имена переменных как константы, чтобы воспользоваться преимуществами автозаполнения IDE и выделения вхождений: $GLOBALS[_VAR1]
.
Конечно, эти отличные функции также работают с переменными класса, что является еще одной причиной подумать о рефакторинге :)
person
Fanis Hatzidakis
schedule
06.05.2011
$this->variable
будет намного лучше. - person Ry-♦   schedule 06.05.2011