php – извлечь массив в глобальные переменные
В руководстве по «извлечению» показано, что вы можете извлечь массив, например:
Но функция extract не возвращает переменные. Есть ли способ «глобализации» этих переменных? Может быть, не использовать экстракт, а цикл foreach?
EDIT: (объяснение о том, чего я пытаюсь достичь) У меня есть массив, содержащий сотни выходных сообщений, которые я хочу иметь доступными как переменные эффективно. Я имею в виду, что всякий раз, когда я хочу вывести сообщение, скажите:
$englishMessages = array('helloWorld'=>'Hello World'); $spanishMessages = array('helloWorld'=>'Hola Mundo'); '';
Появится сообщение. Причина, по которой я делаю это, так это то, что пользователи могут изменять язык, на котором они просматривают веб-сайт, поэтому что-то вроде: ». $ helloWorld. »; будет производить:
Не совсем ответ на ваш вопрос … но: Храните массив, не загрязняйте (глобальное) пространство имен переменных.
$englishMessages = array('helloWorld'=>'Hello World'); $spanishMessages = array('helloWorld'=>'Hola Mundo'); // wrap this in a nice function/method $lang = $englishMessages; // then use $lang for the output '';
Некоторые вариации по одной теме:
function getMessages($language) < static $l = array( 'en'=>array('helloWorld'=>'Hello World'), 'es' => array('helloWorld'=>'Hola Mundo') ); // return $l[$language]; > $lang = getMessages('en'); echo '';
function __($language, $id) < static $l = array( 'en'=>array('helloWorld'=>'Hello World'), 'es' => array('helloWorld'=>'Hola Mundo') ); // return $l[$language][$id]; > echo '';
Вы также можете быть заинтересованы в http://docs.php.net/gettext
function foo() < $vars = array('aa' =>11, 'bb' => 22); $GLOBALS += $vars; > foo(); echo $aa; // prints 11
что вы можете объяснить, зачем вам это нужно? Использование глобальных переменных считается плохим стилем, возможно, есть лучший способ
использование extract () в массиве будет создавать новые переменные внутри текущей области или назначать новые значения для существующих переменных.
Я не уверен, что вы подразумеваете под «глобализацией», но я понимаю, что вы пытаетесь выполнить именно то, что делает extract (), просто помните о текущей области (если вы извлекаете () изнутри функции, извлеченный переменные будут доступны только внутри самой функции).
foreach($array as $var_name => $var_value)
Это будет глобальная каждая переменная, а затем установите ее значение. Для вас это создало бы $one и $two
foreach ($array as $key => $value) < // initialize the variables as global global $$key; $$key = $value; >
РЕДАКТИРОВАТЬ:
Только что заметила мою ошибку, вам нужно сделать ключ массива переменной, что можно сделать, переведя его в переменные переменные, используя нотацию $$ .
Вы ищете переменные, которые были извлечены? Их можно найти с помощью array_keys()
$GLOBALS
An associative array containing references to all variables which are currently defined in the global scope of the script. The variable names are the keys of the array.
Examples
Example #1 $GLOBALS example
function test () $foo = «local variable» ;
?php
echo ‘$foo in global scope: ‘ . $GLOBALS [ «foo» ] . «\n» ;
echo ‘$foo in current scope: ‘ . $foo . «\n» ;
>
$foo = «Example content» ;
test ();
?>
The above example will output something similar to:
$foo in global scope: Example content $foo in current scope: local variable
As of PHP 8.1.0, write access to the entire $GLOBALS array is no longer supported:
Example #2 writing entire $GLOBALS will result in error.
// Generates compile-time error:
$GLOBALS = [];
$GLOBALS += [];
$GLOBALS =& $x ;
$x =& $GLOBALS ;
unset( $GLOBALS );
array_pop ( $GLOBALS );
// . and any other write/read-write operation on $GLOBALS
?>?php
Notes
Note:
This is a ‘superglobal’, or automatic global, variable. This simply means that it is available in all scopes throughout a script. There is no need to do global $variable; to access it within functions or methods.
Note: Variable availability
Unlike all of the other superglobals, $GLOBALS has essentially always been available in PHP.
Note:
As of PHP 8.1.0, $GLOBALS is now a read-only copy of the global symbol table. That is, global variables cannot be modified via its copy. Previously, $GLOBALS array is excluded from the usual by-value behavior of PHP arrays and global variables can be modified via its copy.
// Before PHP 8.1.0
$a = 1 ;
$globals = $GLOBALS ; // Ostensibly by-value copy
$globals [ ‘a’ ] = 2 ;
var_dump ( $a ); // int(2)
?php
// As of PHP 8.1.0
// this no longer modifies $a. The previous behavior violated by-value semantics.
$globals = $GLOBALS ;
$globals [ ‘a’ ] = 1 ;
// To restore the previous behavior, iterate its copy and assign each property back to $GLOBALS.
foreach ( $globals as $key => $value ) $GLOBALS [ $key ] = $value ;
>
?>
PHP Global: глобальные переменные
В этой статье пойдет разговор о том, что такое глобальные переменные в PHP и чем они отличаются от локальных. Также читатель узнает о том, как использовать ассоциативный массив $GLOBALS вместо ключевого слова Global. Пояснения будут даны на конкретных примерах.
В языке программирования PHP существует понятие глобальных переменных (globally variables). Но для начала следует вспомнить о переменных локальных. Последние определены внутри пользовательской функции (внутри подпрограммы), причем на нее вы сможете ссылаться лишь в этой функции. Таким образом, локальная variable доступна лишь внутри той функции, в которой она определена (доступна в локальной области видимости).
Глобальные значения, в отличие от локальных, доступны всей программе целиком, куда также входят и подпрограммы (пользовательские функции).
Для языка программирования PHP все переменные, которые объявлены и задействуются в функции, локальны для функции (так обстоят дела по умолчанию). Таким образом, по дефолту возможность поменять значение переменной global в теле функции отсутствует.
Давайте представим, что мы в теле пользовательской функции PHP захотим применить переменную с именем, причем это имя будет идентично имени глобальной переменной, которая находится вне user function. В результате никакого отношения данная локальная variable к глобальной иметь не будет. В описанном только что случае в пользовательской функции будет создана local variable, причем с именем в PHP, которое будет идентично имени global variable, однако доступна такая переменная будет лишь внутри нашей пользовательской функции.
Все вышеописанное лучше пояснить на примере:
Сценарий кода выведет сначала 555, а потом 888. Чтобы избавиться от недостатка, продемонстрированного в function test (это не ошибка, а именно недостаток), в языке программирования PHP предусмотрена особая инструкция global. Эта инструкция дает возможность пользовательской функции взаимодействовать с глобальными переменными.
Рассмотрим этот принцип на очередном примере:
Скрипт с function sum выведет результат 15. Что тут произошло? После того, как $x и $y были определены внутри нашей функции в качестве global, все существующие ссылки на любую из этих статических переменных стали указывать уже на их глобальную версию. При данных обстоятельствах отсутствуют какие-либо ограничения на количество global variables, доступных к обработке с помощью user functions.
PHP и глобальные переменные. Массив $GLOBALS
Есть и другой способ, обеспечивающий доступ к глобальной области видимости. Он заключается в применении специального массива , определяемого PHP. Мы можем переписать предыдущий пример иначе, задействовав $GLOBALS:
$GLOBALS[«y»] = $GLOBALS[«x»] + $GLOBALS[«y»];
$GLOBALS является ассоциативным массивом, его ключ — это имя, его значение — это содержимое глобальной переменной. Важно обратить внимание на тот факт, что $GLOBALS может существовать практически в любой области видимости, что объясняется следующим образом: данный массив является суперглобальным.
Ниже расположен пример, который демонстрирует возможности использования суперглобальных переменных:
Хотите знать о PHP гораздо больше? Добро пожаловать на курс!