Laravel的helpers.php文件中全局变量声明无效问题如何解决?
问题原因
Laravel加载自定义helpers.php文件时,是在函数内部通过include/require引入的,你在helpers.php最外层定义的$t默认属于加载函数的局部作用域,不属于PHP全局作用域。当你在subtraction函数中用global $t声明时,PHP会优先从全局作用域查找$t,找不到就会自动创建一个空的全局数组$t,所以最终结果只存了14,初始的[13]没有被读取到。
解决方案
方案1:在helpers.php最外层定义
$t时显式声明为全局变量global $t; $t = [13]; function subtraction() { global $t; $t[] = 14; var_dump($t,gettype($t)); } subtraction();这样哪怕helpers.php在函数作用域内加载,
$t也会被注册到全局作用域,函数内可以正常读取到初始值。方案2:直接使用
$GLOBALS超全局数组操作,避免作用域混淆$GLOBALS['t'] = [13]; function subtraction() { $GLOBALS['t'][] = 14; var_dump($GLOBALS['t'],gettype($GLOBALS['t'])); } subtraction();$GLOBALS是PHP原生超全局变量,在所有作用域下都可以直接访问,不需要额外声明。方案3(推荐):避免使用全局变量,符合Laravel开发规范
可以将值存在静态类属性或者Laravel服务容器中,不会出现作用域冲突问题,也更便于后续维护。
内容的提问来源于stack exchange,提问作者pichanakian
相关产品推荐
相关产品推荐

