和其它语言(如js
)不同,PHP
在默认情况下,函数内部不能直接访问外部定义的变量,如下图所示:
代码编写时,编译器已经有语法提示了,直接执行也会报“变量未定义”的错误。但有些时候,又不可避免的需要在函数内部使用外部变量,这时就需要用到一些特殊的语法和技巧。
1. 使用超全局变量$_GET
, $_POST
, $_SESSION
等
<?php
$_SESSION['outsideVar'] = "Hello World";
function printOutsideVar()
{
echo $_SESSION['outsideVar'];
}
printOutsideVar(); // 输出 "Hello World"
当然,也可以在函数内部赋值,函数外部使用。
<?php
function setInnerVar()
{
$_SESSION['innerVar'] = "Hello World";
}
setInnerVar();
echo $_SESSION['innerVar']; // 输出 "Hello World"
不难看出,这里的超全局变量都有特定的含义,比较适合在特定的场景下共享全局数据。
2. 使用超全局变量$GLOBALS
<?php
$outsideVar = "Hello World";
function printOutsideVar()
{
echo $GLOBALS['outsideVar'];
}
printOutsideVar(); // 输出 "Hello World"
$GLOBALS
是一个关联数组,其中每个键都对应一个全局变量的名称,每个值都是相应全局变量的内容。虽然使用 $GLOBALS
可以操作全局变量,但这么做并不优雅,因为它破坏了封装性,并且可能使代码难以理解和维护。
3. 使用global 关键字
<?php
$outsideVar = "Hello World";
function printOutsideVar()
{
global $outsideVar;
echo $outsideVar;
}
printOutsideVar(); // 输出 "Hello World"
global
用于创建一个全局变量的引用,使用 global
关键字是访问全局变量的更常见和推荐的方式。
4. 使用闭包(匿名函数)
<?php
$outsideVar = "Hello World";
$printOutsideVar = function () use ($outsideVar) {
echo $outsideVar;
};
$printOutsideVar(); // 输出 "Hello World"
闭包可以捕获其外部作用域中的变量,use($outsideVar)
语法用于捕获$outsideVar
变量并在闭包内部使用它。
请注意,过度使用全局变量可能会导致代码难以维护和理解。通常建议尽可能避免在函数中直接使用全局变量。更好的做法是将需要的变量作为参数传递给函数,或者考虑使用类来封装相关的数据和功能。这样做可以提高代码的可读性、可维护性和可测试性。
评论0
暂时没有评论