область действия переменной функции php

#php

#php

Вопрос:

Мне было интересно, есть ли у меня такая функция:

 function isAdmin ($user_id) {

    $admin_arr = array(1, 2);

    foreach ($admin_arr as $value) {

        if ($value == $user_id) {
            return true;
        }
    }

    return false;
}
  

Могу ли я создать массив вне этой функции в виде глобального массива и использовать его внутри функции, не отправляя его в качестве параметра, а также вместо этого объявить новый массив admin внутри функции, как я только что сделал выше? Как бы я это сделал?

С уважением, Александр

Комментарии:

1. Зачем вам это нужно? Это возможно, но не рекомендуется.

2. Да, вы могли бы, но избегайте global s, насколько это возможно. В чем проблема с передачей ее в функцию?

3. Я думаю, вы можете использовать define(), чтобы сделать ее константой, если этот массив на самом деле является константой.

4. @albb: вы не можете определить постоянный массив

Ответ №1:

Чтобы ответить на буквальный вопрос:

 // Global variable
$admin_arr = array(1, 2);

function isAdmin ($user_id) {

    // Declare global
    global $admin_arr;

    foreach ($admin_arr as $value) {

        if ($value == $user_id) {
            return true;
        }
    }

return false;
}
  

Документация здесь: http://php.net/manual/en/language.variables.scope.php

Чтобы ответить на РЕАЛЬНЫЙ вопрос: избегайте глобального любой ценой. Вы вводите в свое приложение множество кода, подверженного ошибкам. Полагаться на глобальные переменные — значит вступать в мир боли и делать ваши функции менее полезными.

Избегайте этого, если вы абсолютно не видите другого пути.

Ответ №2:

вы должны сделать это с помощью ключевого слова global

вот пример

 $arr = array('bar');
function foo() {
    global $arr;
    echo array_pop($arr);
}
foo();
  

Ответ №3:

Я согласен с другими, что это не самый предпочтительный способ сделать это, и вам следует передавать массив в качестве параметра, но я просто хотел указать на $GLOBALS[] суперглобальный массив, который я нахожу более читаемым, чем global ключевое слово.

 $global_array = array(1,2,3);

function myfunc()
{
  echo $GLOBALS['global_array'][0];
  print_r($GLOBALS['global_array']);
}