我正在阅读O'Reilly的有关PHP的书,它具有以下主张:
使函数可以访问外部创建的变量的更好方法是,从函数内部声明它为全局变量。
我不明白的是为什么我必须从函数中声明全局变量?全局变量不是代码的所有部分都可以访问的吗?
这是本书中的示例,可以很好地工作:
<?php
$a1 = "WILLIAM";
$a2 = "henry";
$a3 = "gatES";
echo $a1 . " " . $a2 . " " . $a3 . "<br>";
fix_names();
echo $a1 . " " . $a2 . " " . $a3;
function fix_names()
{
global $a1; $a1 = ucfirst(strtolower($a1));
global $a2; $a2 = ucfirst(strtolower($a2));
global $a3; $a3 = ucfirst(strtolower($a3));
}
?>
这是输出:
WILLIAM henry gatES
William Henry Gates
但是当我尝试运行下面的代码时,其中已在函数外部定义了全局变量:
<?php
global $a1;
global $a2;
global $a3;
$a1 = "WILLIAM";
$a2 = "henry";
$a3 = "gatES";
echo $a1 . " " . $a2 . " " . $a3 . "<br>";
fix_names();
echo $a1 . " " . $a2 . " " . $a3;
function fix_names()
{
$a1 = ucfirst(strtolower($a1));
$a2 = ucfirst(strtolower($a2));
$a3 = ucfirst(strtolower($a3));
}
?>
它给了我一个警告:
WILLIAM henry gatES
Notice: Undefined variable: a1 in C:\xampp\htdocs\code.php on line 13
Notice: Undefined variable: a2 in C:\xampp\htdocs\code.php on line 14
Notice: Undefined variable: a3 in C:\xampp\htdocs\code.php on line 15
WILLIAM henry gatES
为什么输出不同?这两个代码到底有什么不同?
(我意识到这是一种不好的编程习惯;我想做的只是了解一些东西)