You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何修复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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.28 22:27:05