gpt4 book ai didi

php - 在 PHP 中访问全局变量的问题

转载 作者:可可西里 更新时间:2023-11-01 13:14:06 28 4
gpt4 key购买 nike

以下是代码片段:

function something() {
$include_file = 'test.php';
if ( file_exists($include_file) ) {
require_once ($include_file);
// global $flag;
// echo 'in main global scope flag='.$flag;
test();
}
}

something();

exit;

//in test.php

$flag = 4;
function test() {
global $flag;

echo '<br/>in test flag="'.$flag.'"';
if ($flag) {
echo 'flag works';
//do something
}
}

上面的代码片段,正确地回显了'global scope' $flag 的值,但是不识别值为 4 的 $flag,假定 $flag 为 null 值。请指出访问 $flag 全局变量有什么问题。

提前致谢,安妮莎

最佳答案

您在这里遇到问题仅仅是因为 PHP 当前解释您的文件的方式。你有嵌套函数。

这是您的代码当前的执行方式:

function something() {
$include_file = 'test.php';
if ( file_exists($include_file) ) {
//require_once ($include_file);

$flag = 4;
function test() {
global $flag;

echo '<br/>in test flag="'.$flag.'"';
if ($flag) {
echo 'flag works';
//do something
}
}

//end require_once ($include_file);

test();
}
}

something();

exit;

如您所见,当您将 4 的值赋给 $flag ($flag = 4) 时,您在函数 something() 的范围,不在全局范围内。

test() 中,由于您在该函数中将 $flag 声明为全局变量,因此 $flag 是一个完全不同的变量,全局变量整个脚本。

为了避免这个问题,使用超全局$GLOBALS .无论如何,它比使用 global 更快,而且这样你就不会像上面那样被卷入范围问题:

function something() {
$include_file = 'test.php';
if ( file_exists($include_file) ) {
//require_once ($include_file);

$GLOBALS['flag'] = 4;
function test() {
global $flag;

echo '<br/>in test flag="'.$GLOBALS['flag'].'"';
if ($GLOBALS['flag']) {
echo 'flag works';
//do something
}
}

//end require_once ($include_file);

test();
}
}

something();

echo $flag; //echos 4

exit;

关于php - 在 PHP 中访问全局变量的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2290891/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com