PHP中如何在函数内部访问并使用全局数组中的对应值
问题原因说明
- 作用域限制:PHP函数默认拥有独立的作用域,未做特殊声明时,无法直接访问全局作用域中定义的
$users、$userName、$userPass变量 $GLOBALS语法错误:你使用的嵌套引用写法不符合PHP数组取值规则,不能将$GLOBALS调用直接嵌套在另一个$GLOBALS的键名字符串中- 原有代码语法疏漏:
$userName = "Alejandro"行末尾缺少分号,checkUser函数缺少闭合的右大括号,同时$UserPass变量名首字母大写,调用时需注意大小写匹配
解决方法
方法1:正确使用$GLOBALS取值
$GLOBALS是PHP的超全局数组,键为全局变量的名称,需要分层取值:
$users = ["admin" => "admin","Alejandro" => "8345245"]; $userName = "Alejandro"; $userPass = "8345245"; // 统一变量名大小写 function checkUser(){ if($GLOBALS['users'][$GLOBALS['userName']] == $GLOBALS['userPass']){ return "The password is good"; } return "The password is wrong"; }
方法2:使用global关键字声明全局变量(写法更简洁)
在函数内部提前声明需要用到的全局变量,即可直接调用:
$users = ["admin" => "admin","Alejandro" => "8345245"]; $userName = "Alejandro"; $userPass = "8345245"; function checkUser(){ global $users, $userName, $userPass; if($users[$userName] == $userPass){ return "The password is good"; } return "The password is wrong"; }
方法3:参数传值(更推荐,避免全局变量污染)
不依赖全局变量,将需要用到的值通过参数传入函数,降低代码耦合度:
$users = ["admin" => "admin","Alejandro" => "8345245"]; $userName = "Alejandro"; $userPass = "8345245"; function checkUser($users, $userName, $userPass){ if($users[$userName] == $userPass){ return "The password is good"; } return "The password is wrong"; } // 调用时传入对应参数即可 echo checkUser($users, $userName, $userPass);
内容的提问来源于stack exchange,提问作者AB_programmer
相关产品推荐
相关产品推荐

