基本上,我是学习php的新手。我对php中的本地和全局作用域有疑问。所以我有这段代码:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Document</title>
</head>
<body>
<?php
$x = 'outside';
function convert(){
global $x;
$x = 'inside';
echo $x;
}
echo $x . '</br>';
convert();
echo $x;
?>
</body>
</html>
因此,在函数convert
中,我通过global $x;
声明了全局类型的变量,不是吗?
然后,在写完convert();
和echo $x;
之后,它返回给我inside的值。那么写convert();
之后如何获得外部价值?
我以为我在函数中写了global $x;
和$x = 'inside';
之后就重命名了全局变量,但是如果我不写convert();
,我将获得'outside'值。我觉得我很困惑...
感谢您的帮助,祝您好运。
答案 0 :(得分:0)
兄弟,局部变量在方法中定义,其权限仅在该方法中。但是您可以在该页面或类的任何地方使用全局变量。
在您的情况下,您的答案是 外 内 内 因为当您因为全局定义而调用第一个$ x时,它会打印外部。当您调用该函数时,它将显示函数值 inside ,然后将值存储在$ x中,并在打印$ x时再次显示内部值。 在此先感谢您的理解。
答案 1 :(得分:0)
我会尝试通过评论每个例子来回答这个问题
<?php
// You are assigning outside to the global scope $x
$x = 'outside';
echo $x; // This echo's 'outside'
convert();
function convert(){
global $x; // You are declaring $x global so its filled with 'outside'
$x = 'inside'; // You are changing the global var to inside
echo $x; // this echo's 'inside'
}
echo $x; // This again echo's 'inside' because that was the last thing that got assigned
您可以采取一些不同的方法,而根本不使用全局,就像这样:
<?php
// You are assigning outside to the global scope $x
$x = 'outside';
echo $x; // This echo's 'outside'
$value = convert($x); // Pass the value to the function and get back 'inside' which is loaded into $value
function convert($value){
$value = 'inside'; // the $value is only valid inside the function
echo $value; // this echo's 'inside'
return $value;
}
echo $x; // This again echo's 'outside' because that was the last thing that got assigned to it
echo $value; // This echo^s 'inside' as this was returned from the function
看看这个,我想一切都会变得清楚:https://secure.php.net/manual/en/language.variables.scope.php