在函数中访问全局变量

时间:2012-11-25 08:09:52

标签: php global-variables behavior

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

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

此外,我还不明白我们如何能够将变量置于其他地方,而不是声明。

对不起,这可能不是一个问题,确切地询问代码的确切位置,但我相信理解为什么代码以特定方式编写以及为什么它以特定方式运行也很重要。

把它(希望)放在很清楚的字眼中

我想知道:在函数内部,当我们创建一个与外部作用域中已存在的变量同名的全局变量时,它实际上将外部作用域中的变量全局化,而不是创建新的全局变量(空值)。是这样的吗?如果是,那与其他语言没有什么不同?那么这种不同的行为背后有什么理由吗?

4 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:0)

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

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

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

echo $ _SESSION ['a'];

答案 2 :(得分:0)

根据手册 - 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

答案 3 :(得分:0)

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

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