从函数PHP中更改全局变量

Chr*_*ier 38 php variables global function

我试图在函数内更改函数之外的变量.因为如果函数检查的日期超过一定数量,我需要它来更改代码开头的日期年份.

$var = "01-01-10";
function checkdate(){
     if("Condition"){
            $var = "01-01-11";
      }
}
Run Code Online (Sandbox Code Playgroud)

Ali*_*aru 52

A.使用global关键字从应用程序范围导入.

$var = "01-01-10";
function checkdate(){
    global $var;  
    if("Condition"){
        $var = "01-01-11";
    }
}
checkdate();
Run Code Online (Sandbox Code Playgroud)

B.使用$ GLOBALS数组.

$var = "01-01-10";
function checkdate(){
    if("Condition"){
        $GLOBALS['var'] = "01-01-11";
    }
}
checkdate();
Run Code Online (Sandbox Code Playgroud)

C. 通过引用传递变量.

$var = "01-01-10";
function checkdate(&$funcVar){  
    if("Condition"){
        $funcVar = "01-01-11";
    }
}
checkdate($var);
Run Code Online (Sandbox Code Playgroud)

  • @JeromyFrench第一行和最后一行引用外部作用域中的变量,名为`$ var`.在函数内部它可能有任何其他名称,所以我选择`$ funcVar`专门用来说明名称可能不同.关于`$ var = checkdate($ var);`,该示例的整个目的是显示传递_by reference_并直接在函数中更改传递的变量. (2认同)
  • 好的,我想我明白了.`function checkdate(&$ funcVar)`结合`checkdate($ var);`将外部`$ var`映射到内部`$ funcVar`. (2认同)

Bug*_*ill 44

只需使用如下global关键字:

$var = "01-01-10";
function checkdate(){
     global $var;

     if("Condition"){
            $var = "01-01-11";
      }
}
Run Code Online (Sandbox Code Playgroud)

那么对该变量的任何引用都将是全局变量.

  • 这就是这样做的.使用`global`更改函数内部的变量`$ var`以指向全局变量.当您在函数内部更改该变量时,它将更改全局变量. (4认同)

Dou*_*uth 8

这里的所有答案都很好,但是......你确定要这样做吗?

从函数内部更改全局变量通常是一个坏主意,因为它很容易导致意大利面条代码发生,其中变量在整个系统中被更改,函数彼此相互依赖等等.这是一个真正的混乱.

请允许我建议一些替代方案:

1)面向对象的编程

2)让函数返回一个由调用者分配的值.

例如$ var = checkdate();

3)将值存储在通过引用传递给函数的数组中

function checkdate(&$ values){if(condition){$ values ["date"] ="01-01-11"; }}

希望这可以帮助.


riz*_*zon 6

试试这个传递参考

  $var = "01-01-10";
    function checkdate(&$funcVar){  
        if("Condition"){
            $funcVar = "01-01-11";
        }
    }
    checkdate($var);
Run Code Online (Sandbox Code Playgroud)

或尝试与上述相同,保持功能相同.

 $var = "01-01-10";
    function checkdate($funcVar){  
        if("Condition"){
            $funcVar = "01-01-11";
        }
    }
    checkdate(&$var);
Run Code Online (Sandbox Code Playgroud)