Php получить значение глобальной переменной вне функции - PullRequest
1 голос
/ 19 октября 2019

У меня есть эта тестовая функция в php:

funtion drop() {
    global $test_end;

    if(file_exists("test.php")) {
        $ddr="ok";
    }

    $test_end="ready";
}

Я знаю, что если я позвоню drop(), это даст мне "в порядке", например.

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

Например, вызов drop(), а затем запустите echo $test_end; вне функции, чтобы получить значение:

drop();
echo $test_end;

Ответы [ 2 ]

3 голосов
/ 19 октября 2019

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

Учитывая ваш простой пример, вы можете просто вернуть значение из метода:

function drop()
{
    if(file_exists("test.php"))
    {
        $ddr="ok";
    }

    $test_end="ready";
    return $test_end;
}

$test_end = drop();

Если у вас более сложный случай и по какой-то причине не можете вернутьзначение, передайте переменную по ссылке, добавив к ней префикс &:

funtion drop(&$test_end)
{
    if(file_exists("test.php"))
    {
        $ddr="ok";
    }

    $test_end="ready";
}

$test_end = null;
drop($test_end);
echo $test_end; // will now output "ready"

Передача по ссылке также не является хорошим шаблоном, поскольку она все еще делает ваш код запутанным.

Подробнее о том, почему глобальные переменные плохие

Проблема в том, что, если я смотрю на ваш код, и все, что я вижу, это:

drop();
echo $test_end;

Я понятия не имею, как $ test_endполучил набор или какова его ценность. Теперь предположим, что у вас есть несколько вызовов методов:

drop();
foo();
bar();
echo $test_end;

Теперь мне нужно взглянуть на определение всех этих методов, чтобы выяснить, каково значение $ test_end. Это становится очень большой проблемой в больших кодовых базах.

0 голосов
/ 20 октября 2019

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

Чтобы получить значение, вы просто ссылаетесь на него:

 function set()
 {
    global $test_end;
    $test_end="ready";
 }
 function show()
 {
    global $test_end;
    print "in show() value=$test_end\n";
 }
 function noscope()
 {
     print "in noscope() value=$test_end\n";
 }
 $test_end="begin";
 print "In global scope value=$test_end\n";
 show();
 noscope();
 set();
 print "after calling set()\n";
 print "In global scope value=$test_end\n";
 show();
 noscope();
...