如何修复PHP7.4中Trying to access array offset on value of type bool提示?
问题产生原因
- PHP 7.4及以上版本增强了类型校验规则,当尝试对布尔值(true/false)使用数组下标方式读取属性时,就会抛出
Trying to access array offset on value of type bool的notice提示,更低版本的PHP遇到同类情况只会静默返回null,不会抛出提示。 - 你当前的代码虽然提前判断了
$book_font非空,但没有校验foreach循环中遍历出来的每个$font是否为数组类型:当$book_font数组中混入了布尔类型的元素(常见于数据源查询失败、函数处理异常返回false的场景),访问$font['face']就会触发该提示。
修复方案
方案1:循环内新增类型和键名校验(推荐,改动最小)
在访问$font['face']之前先校验格式合法性,修改后代码如下:
// 额外新增is_array判断,避免$book_font为非数组真值(比如非0数字)时foreach报错 if( $book_font && is_array($book_font) ){ foreach ( $book_font as $key => $font ) { // 新增校验:$font为数组且存在face键才继续执行后续逻辑 if ( is_array($font) && isset($font['face']) && in_array( $font['face'], $all_google_fonts ) ) { self::options_typography_enqueue_google_font( $font['face'] ); } } }
方案2:提前过滤无效元素
如果业务要求$book_font的有效元素都必须是带face键的数组,可以在循环前先做统一过滤:
if( $book_font && is_array($book_font) ){ // 提前过滤掉非数组、缺少face键的无效元素 $valid_fonts = array_filter($book_font, function($item){ return is_array($item) && isset($item['face']); }); foreach ( $valid_fonts as $key => $font ) { if ( in_array( $font['face'], $all_google_fonts ) ) { self::options_typography_enqueue_google_font( $font['face'] ); } } }
如果业务逻辑上要求$book_font的所有元素都必须是带face键的数组,建议同时排查$book_font的生成逻辑,从根源避免无效元素进入数组
内容的提问来源于stack exchange,提问作者Spouter
相关产品推荐
相关产品推荐

