为什么必须从函数内部声明全局变量,以便可以访问外部变量?

时间:2019-05-11 12:17:16

标签: php

我正在阅读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

为什么输出不同?这两个代码到底有什么不同?

(我意识到这是一种不好的编程习惯;我想做的只是了解一些东西)

0 个答案:

没有答案