如果我在函数之前更改全局变量,为什么不起作用?

时间:2018-02-04 14:00:06

标签: php function variables scope global

下一个PHP代码使名称首字母大写,其他小写:

<?php
$a1 = "WILLIAM";
$a2 = "henry";
$a3 = "gatES";
fix_names();
echo $a1 . " " . $a2 . " " . $a3;
function fix_names()
{
 global $a1;
 global $a2;
 global $a3;
 $a1 = ucfirst(strtolower($a1));
 $a2 = ucfirst(strtolower($a2));
 $a3 = ucfirst(strtolower($a3));
}
/*Output: William Henry Gates*/
?>

如果我将变量范围更改为功能全局,则它不起作用:

<?php
$a1 = "WILLIAM";
$a2 = "henry";
$a3 = "gatES";
global $a1;
global $a2;
global $a3;
fix_names();
echo $a1 . " " . $a2 . " " . $a3;
function fix_names()
{
$a1 = ucfirst(strtolower($a1));
$a2 = ucfirst(strtolower($a2));
$a3 = ucfirst(strtolower($a3));
}
/*Output: WILLIAM henry gatES*/
?>

请解释一下为什么它不起作用!

1 个答案:

答案 0 :(得分:0)

  

函数内使用的任何变量默认都限制在本地函数范围内。例如:

<?php
    $a = 1; /* global scope */ 

    function test()
    { 
        echo $a; /* reference to local scope variable */ 
    } 

    test();
?>
  

此脚本不会产生任何输出,因为echo语句引用$a变量的本地版本,并且尚未在此范围内分配值。您可能会注意到这与C语言略有不同,因为C中的全局变量可自动用于函数,除非被本地定义特别重写。这可能会导致一些问题,因为人们可能会无意中更改全局变量。

     

在PHP中,如果要在函数中使用全局变量,则必须在函数内声明全局变量。

参考:http://php.net/variables.scope

因此,为了从函数外部访问变量,您需要在函数内部声明它们global ,否则您尝试在{0}上执行ucfirst(strtolower($a1))变量$a1,它甚至不存在于当前(本地)范围内。