#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']);
}