Должен ли я объявлять глобальные переменные в верхней части файла PHP?

Я использую IDE Netbeans, рядом с необъявленными переменными отображается предупреждение - очень полезно.

Если это у меня вверху файла

global $CFG;

тогда предупреждения исчезнут, потому что переменная была объявлена.

Но так ли это хорошая практика? Есть ли в них преимущества? Код по-прежнему работает без объявления.

Примечание: это для файлов, которые содержат код, не относящийся к функциям.


person Russell England    schedule 10.03.2013    source источник
comment
Хорошая практика - вообще не использовать глобальные переменные - это чистое зло.   -  person zerkms    schedule 11.03.2013
comment
Это неприятный запах кода. Скорее всего, ваш код требует серьезных улучшений.   -  person John Conde    schedule 11.03.2013
comment
Я думаю, что люди могут неправильно понимать намерения OP ... на первый взгляд кажется, что он просто использует переменную в глобальной области, а php уведомляет его, потому что он не был сначала определен   -  person Crayon Violent    schedule 11.03.2013
comment
Спасибо, ребята, я работаю с системой с открытым исходным кодом, используемой во всем мире, которая должна переименовывать безымянный :) Просто так случилось, что есть некоторые ключевые глобальные переменные. Я предпочитаю объявлять все переменные, которые используются в следующем коде, но, похоже, это не обычная практика для этой конкретной системы. Мой вопрос касается практики объявления глобальных переменных, а не того, следует ли их вообще использовать. Ваше здоровье.   -  person Russell England    schedule 11.03.2013


Ответы (3)


Перед использованием переменных рекомендуется объявлять переменные. Однако объявлять их глобальными в глобальной области видимости излишне. Вы могли бы просто сделать

Вместо того, чтобы делать

global $CFG;

ты можешь просто сделать

$CFG;

Единственный раз, когда объявление их с префиксом global является «полезным», это когда вы делаете это внутри функции для доступа к глобальной переменной изнутри функции - но это обычно плохая практика, очень немногие случаи, когда это абсолютно необходимо.

person Crayon Violent    schedule 10.03.2013
comment
Ключевое слово var устарело с PHP 5.1.2. - person Brandon Wamboldt; 11.03.2013
comment
@RogueCoder, ты прав, обновился. - person Crayon Violent; 11.03.2013
comment
$CFG; не имеет смысла в php. Не могли бы вы привести пример, когда $var изменяет поведение php? - person zerkms; 11.03.2013

Нет, если вы хотите использовать переменную вне ее области (например, внутри функции), вы можете передать ее или глобализировать внутри функции.

function xoxo(){
   global $var;
}
person Iesus Sonesson    schedule 10.03.2013
comment
Ответ - никогда не использовать глобальные переменные, а вместо этого правильно структурировать свое приложение. - person Major Productions; 11.03.2013

Есть две вещи, которые заставили бы меня опасаться такого «объявления» переменных.

Во-первых, большие объемы кода вне какой-либо функции, вероятно, означают, что ваш код требует повторного факторинга. На верхнем уровне вашего кода у вас может быть несколько строк, которые вызывают основные действия сценария или страницы, но то, что ваши объявления будут идти «вверху файла», предполагает, что есть нечто большее, чем это.

Во-вторых, «объявление» переменной в PHP обычно является синонимом присвоения ей какого-либо начального значения. Например, установка $params = array() перед созданием списка параметров шаблона, таких как $params['foo'] = get_foo(). Такую инициализацию всегда следует проводить рядом с кодом, использующим ее, чтобы, если вы позже ее повторно разложите, код пошел вместе с ней.

Пример того, почему всегда рекомендуется инициализировать переменную, - это если вы в конечном итоге помещаете весь блок кода в какой-то цикл. В приведенном выше случае, если бы я рендерил несколько шаблонов и забыл инициализировать $params, $params['foo'] мог быть передан каждому отдельному шаблону.

person IMSoP    schedule 10.03.2013