我刚刚遇到一段代码,它可以通过使其成为全局变量来访问变量,并开始思考它是否与其他语言方法/行为不同
<?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));
}
?>
代码访问在函数外部定义的变量,并使它们在函数内部成为全局变量。这在其他语言中是不可能的。例如,我们在 C 的全局空间中编写变量并使其成为全局变量,因此我们可以在函数内部访问它们。因此,我们首先将它们设为全局,然后在任何地方访问它们。在上面的代码中,我们首先在函数内部访问它们(我也不明白当它们没有作为参数传递时我们如何访问函数内部的 $a1、$a2、$a3),然后将它们设为全局。这是因为 PHP 处理器的任何不同行为。
此外,我不明白我们如何使变量在其声明之外的其他地方成为全局变量。
抱歉,这可能不是一个确切地询问代码在哪里中断的问题,但我相信理解为什么代码以特定方式编写以及为什么它以特定方式运行也很重要。
(希望)用清晰的语言表达
我想知道:在函数内部,当我们创建一个与外部范围中已经存在的变量同名的全局变量时,它实际上是全局化外部范围中的变量而不是创建一个新的全局变量(具有空值)。是这样吗?如果是,那与其他语言没有什么不同吗?那么,这种不同的行为背后有什么原因吗?