更改全局和局部变量

时间:2018-10-28 18:27:11

标签: php

基本上,我是学习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'值。我觉得我很困惑... 感谢您的帮助,祝您好运。

2 个答案:

答案 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