2013-11-15 2 views
0

Немного смущает объем переменных в PHP. Я прочитал разделы о сфере видимости, GLOBALS и global в руководстве по PHP, но это, похоже, не имеет места в приложении, которое я создаю. В начале страницы я ставлю переменную как этотPHP Scope и глобальные

$vars = array( 'id' => '2', 'name' => 'john' );

Тогда позже я хочу, чтобы использовать эту функцию в функцию, так что я иду:

function my_func() { global $var; foreach ($vars as $var) { echo $var; } }

Но это не будет работать если я также не поставил global $vars перед первым, когда я установил переменную - мне действительно нужно, но это глобально в обоих местах? или что я делаю неправильно?

Спасибо!

ответ

2

Глобалы беспорядочны и сложны для отладки, передают их как аргумент вашей функции.

$array = array('id' => '2', 'name' => 'john'); 

function my_func($vars) { 
    foreach ($vars as $var) { 
     echo $var; 
    } 
} 

my_func($array); 
+0

Спасибо! так как же работает эта цепь? начальный var передается на вызов функции, а затем на фактическую функцию, а затем на foreach? –

+0

Функция предопределена. Когда вы передаете переменную через аргументы функции, она затем доступна внутри области действия функции по своему усмотрению. Я переименовал переменные, чтобы вы могли понять их лучше. –

+0

@Malthe Milthers Похоже, что http://www.php.net/manual/en/functions.arguments.php может заинтересовать вас. –

1

Typo.

global $var; должен быть global $vars;

+0

Подходящее решение, но, пожалуйста, используйте другие решения, указав, как НЕ использовать глобальные переменные. – ToBe

+0

ToBe является правильным. Я просто указывал, почему ваш код не работает. –

1

То, что вы на самом деле делать неправильно - использует глобальные переменные. Никогда не делайте этого, потому что глобальные переменные являются побочными эффектами. Они производят случаи, которые могут быть чрезвычайно трудными для отладки. Представьте, что у вас есть функция в 143-м включенном файле, который где-то в 2056-й строке иногда менял вашу переменную, что также вызывает нарушение всей вашей логики.

Таким образом, на самом деле, передать переменные в качестве параметров:

function my_func($vars) 
{ 
    foreach ($vars as $var) 
    { 
     echo $var; 
    } 
} 

Что касается вашего кода - первых, использование непечатаемых. Действительно - для интерпретатора и компилятора они не имеют значения, но для людей, которые будут читать этот код, очень важно видеть четкое изображение.

И ваша ошибка в том, что вы пытаетесь получить доступ к глобальной переменной, которая является вашим итератором цикла, и это не имеет никакого смысла, поскольку ваша глобальная переменная является вашим массивом, а не временным итератором цикла.

Надеюсь, мой быстрый обзор кода поможет вам.

Смежные вопросы