PHP назначить глобальному значению ссылку на другое глобальное значение внутри функции - PullRequest
2 голосов
/ 31 марта 2020

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

В приведенном ниже коде вы можете видеть, что внутри функции $a возвращается значение 5, но после этого она возвращается к своему старому значению (1). $x, с другой стороны, сохранил значение, назначенное внутри функции.

<?php

$a = 1;
$x = 2;
function test() {
    global $a;
    global $x;

    $a = &$x;
    $x = 5;

    echo PHP_EOL;
    echo $a . PHP_EOL;
    echo $x . PHP_EOL;
}

test();

echo PHP_EOL;
echo $a . PHP_EOL; // $a is 1 here instead of 5
echo $x . PHP_EOL;

$a = &$x;

echo PHP_EOL;
echo $a . PHP_EOL;
echo $x . PHP_EOL;

Выходы:

5
5

1
5

5
5

Почему $a теряет свою ссылку после завершения функции?

1 Ответ

1 голос
/ 31 марта 2020

Как заметил @Banzay, я считаю, что $a = &$x; изменяет только переменную области действия. Вы должны использовать $GLOBALS для изменения значения в функции;

function test() {
    global $a;
    global $x;

    $GLOBALS['a'] = &$x;
    $x = 5;

    echo PHP_EOL;
    echo $a . PHP_EOL;
    echo $x . PHP_EOL;
}

Попробуйте онлайн!

1
5

5
5

5
5
...