PHP根据数组内容选取语言变量未触发英文兜底逻辑如何排查
代码错误定位与修复
错误原因
你使用了错误的函数来校验数组元素是否存在:
strpos()仅用于查找字符串内的子串位置,不支持数组作为查询对象。你将数组$trns传入strpos()第一个参数时,PHP会因参数类型不符合抛出Warning,同时返回null。- 你的判断条件是
strpos($trns, $lng) === FALSE,而null和FALSE做严格比较时结果为假,因此无论$lng的值是什么,判断条件永远不成立,永远会走else分支将$trn赋值为$lng。之前en、de场景下看起来正常,只是刚好这两个值是数组中存在的有效值而已。
修复方案
使用专门判断数组元素是否存在的in_array()函数替换strpos()即可,示例代码如下:
// 第三个参数为true开启严格类型校验,避免隐式类型转换带来的逻辑隐患 $trn = in_array($lng, $trns, true) ? $lng : 'en'; include_once $trn . '.php';
如果需要保留原有的if分支写法,也可以调整为:
if (in_array($lng, $trns, true) === false) { $trn = 'en'; } else { $trn = $lng; } include_once $trn.'.php';
内容的提问来源于stack exchange,提问作者YKKY
相关产品推荐
相关产品推荐

