PHP函数无法识别全局变量$word的问题求助
解决PHP函数无法识别全局数组
$word的问题 问题分析
函数lang_base无法识别全局变量$word,即便使用global关键字也无效,核心原因可能是全局变量作用域的使用不当,或者全局变量本身未被正确初始化。
解决方案
方案1:正确使用global关键字
确保在函数内部显式声明要使用的全局变量,且声明语句放在函数逻辑的最开头:
修改find.php中的lang_base函数:
function lang_base($lang,$id_base){ global $word; // 声明使用全局变量$word foreach($word as $item){ // 改用foreach遍历更简洁高效 if($item['key'] == $id_base){ echo $item[$lang]; break; } } }
方案2:将$word作为参数传递(推荐)
避免依赖全局变量,直接将$word数组作为参数传入函数,这是更规范的代码写法,降低耦合度:
- 修改
find.php的函数:
function lang_base($lang,$id_base, $word){ foreach($word as $item){ if($item['key'] == $id_base){ echo $item[$lang]; break; } } }
- 修改
main.php的调用代码:
<?php require_once("find.php"); lang_base('ru','123', $word); // 传入$word数组 ?>
方案3:封装成类(更易维护)
将翻译逻辑封装到类中,通过实例属性存储$word数组,彻底避免全局变量问题,同时便于后续扩展:
- 重构
find.php为类:
<?php require("config/connect_bd.php"); class Translator { private $wordList = []; public function __construct() { $query = "SELECT * FROM `translate` WHERE 1"; $result = mysqli_query($con, $query); foreach($result as $row){ $this->wordList[] = [ 'key' => $row['id'], 'ru' => $row['ru'], 'en' => $row['en'], 'kz' => $row['kz'] ]; } } public function getTranslation($lang, $id) { foreach($this->wordList as $item){ if($item['key'] == $id){ echo $item[$lang]; break; } } } } // 初始化翻译器实例 $translator = new Translator(); ?>
- 修改
main.php调用:
<?php require_once("find.php"); $translator->getTranslation('ru','123'); ?>
额外检查点
如果上述方案仍未解决问题,需要排查:
- 确认
mysqli_query($con, $query)是否返回有效结果,避免$word为空数组 - 检查
find.php中的$word变量是否确实处于全局作用域(没有被嵌套在其他函数或代码块内)
内容的提问来源于stack exchange,提问作者Igor Ostapenko
相关产品推荐
相关产品推荐

