下一个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*/
?>
请解释一下为什么它不起作用!
答案 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
,它甚至不存在于当前(本地)范围内。