PHP中变量作用域的问题


Issues with variable scopes in PHP

我刚刚编写了一个程序来检查PHP中的变量作用域。代码如下:

<?php
$value = 1;
function change_value(){
    if(some_condition){
        $value = 0;
        $asset = 1;
    }else{
        $asset = 0;
    }
    return $asset;
}
echo $value;
change_value();
echo $value;
?>

现在,上面程序的输出是11。一旦$value进入函数change_value(),我如何更改它的值?

传递参数by reference:

<?php
$value = 1;
function change_value(&$value){
    if(/* some_condition */){
        $value = 0;
        $asset = 1;
    }else{
        $asset = 0;
    }
    return $asset;
}
echo $value; // echoes 1
$asset = change_value($value);
echo $value; // echoes 0
echo $asset; // echoes 0 or 1 depending on /* some_condition */
?>

请不要使用global ...,即使有人建议使用。这很糟糕。它让变量可以从整个脚本中访问,当你在包含的不同脚本中访问$value时,你会非常困惑,因为它的行为不同。。。

您试图做的事情违背了一般原则,但是。

$GLOBALS['value'] = 0;

使用这个内部函数可以更改该值,但我建议您不要这样做。

其他人概述的方式要正确得多。