2017-02-03 5 views
0

Простой вопрос: я работаю с чужим кодом и, таким образом, нарушу возможности обновления, если я изменю код вне того, над чем я работаю. Мне просто интересно в PHP, если инициализация подразумевается с ключевым словом «global» внутри функции. то есть это ...PHP-глобальная область и переменная инициализация

// some code 
function myFunc() { 
    global $foo; 
} 
// other code 

достаточно похож на ....

// some code 
$foo = ""; // any initialization value 
function myFunc() { 
    global $foo; 
} 
// other code 

Я предпочитаю, чтобы инициализировать переменные в базовом объеме, в котором они используются, но, как уже упоминалось, что потребовало бы мне измените внешний код в этом случае.

ответ

0

В заявлении global указывается, что когда текущая функция относится к переменной, она обращается к ней в глобальной области действия, а не в локальной области. Это никак не влияет на значение переменной.

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

+0

ОК, но я как бы догадался, что уже много. Являются ли эти два по существу эквивалентными или нет? Представьте себе, например, что $ foo = "" находится внутри функции в первом примере. – Scott

+0

См. Проблему, которую я имею, это старый код, уродливый в том, что он пытался сделать материал, еще не поддерживаемый в php, с помощью evals. Мы в процессе их удаления, но это большая работа. В этом случае часть «eval'd» завершается вызовом функции. Таким образом, если я добавлю дополнительную функцию и поставлю в нее «глобальную», она обратится к глобальной функции области видимости, но код eval'd не будет, если я не добавлю другую глобальную ссылку на одну и ту же переменную. Мой вопрос в том, что это вызовет какие-либо головные боли. В конце концов, мы разорвем все это, но в то же время я должен справиться с этим, насколько смогу. – Scott

+0

Если вы выполняете назначение в функции, оно присваивает глобальную переменную. При необходимости это создаст переменную. Но просто наличие глобального заявления само по себе не создает переменную. – Barmar