访问函数中的全局变量



我刚刚遇到一段代码,它通过使变量全局化来访问变量,并开始思考它是否与其他语言方法/行为不同

<?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处理器的任何不同行为吗。

此外,我不明白我们如何在声明之外的其他地方使变量具有全局性。

很抱歉,这可能不是一个问代码到底在哪里崩溃的问题,但我相信理解为什么代码是以特定的方式编写的,以及为什么它以特定的方法运行也是很重要的。

把它(希望)放在清晰的单词中

我想知道:在一个函数内部,当我们创建一个与外部范围中已经存在的变量同名的全局变量时,它实际上全局化了外部范围中的变量,而不是创建一个新的全局变量(具有null值)。是那样的吗?如果是的话,这与其他语言有什么不同吗?那么,这种截然不同的行为背后有什么原因吗?

在php中,函数有自己的作用域,因此,如果在函数外的其他地方声明变量,则在函数内不可见。要在函数内使用它们,需要将其声明为全局。通常,我使用Registry模式来不破坏全局范围,并存储所有全局对象,稍后我将使用这些对象。

根据手册-http://php.net/manual/en/language.variables.scope.php

变量的作用域是在其中定义它的上下文。大多数情况下,所有PHP变量都只有一个作用域。这个单独的作用域也涵盖了包含的和必需的文件

但是,在用户定义的函数中引入了本地函数范围。默认情况下,函数内部使用的任何变量都仅限于本地函数范围

您可能会注意到,这与C语言有点不同,因为C中的全局变量可以自动用于函数,除非被局部定义覆盖。这可能会导致一些问题,因为人们可能会无意中改变一个全局变量。在PHP中,如果要在函数中使用全局变量,则必须在函数内部声明全局变量。

这使您能够在函数内使用相同的$var名称,而无需重新分配值-

$var = 'string';
function test(){
$var = 'new string';
return $var;
}
echo $var;  // echo's - string
test();     // echo's - new string

考虑使用会话。您可以在文件file1.php中定义变量,如下所示:

session_start();    
$_SESSION['a'] = 'William';

然后,您可以访问文件file2.php中的任何会话变量,如下所示:

echo$_SESSION[‘a'];

请找到一篇关于php中全局变量的好文章-它将告诉你php语言中存在的各种全局变量,以及如何使用和访问这些变量及其目的。

参考:https://www.w3elearners.com/php/global-variables/

相关内容

  • 没有找到相关文章

最新更新