bool/null型に配列でアクセスと言うエラーの解消法【暫定】

3

目次

こんなエラーが出た。

Notice: Trying to access array offset on value of type bool in /Applications/MAMP/htdocs/freeman/wp-content/themes/freeman_wordpress/library/functions/shortcode.php on line 290

php7.4 以上で発生するらしい。日本語にすると「bool 型の値に配列オフセットでアクセスするな」と。

参考: 【PHP】配列の添字と文字列のオフセット指定

ちなみに自分の場合、 WP で追加したオプションの値にアクセスしようとするとこのエラーが出た。

該当コード

// 省略
foreach ($categories as $category) {
  // 省略
  $contents = get_option('sample_category_'.intval($category_id));

  // 省略
  } else if ($parent_category_slug === "hoge"){
    $thumbnail = esc_html($contents['hoge_img']); // 👈 ここで起こった
  }
  // 省略
}

解決方法 isset()を一枚噛ませる

// 省略
foreach ($categories as $category) {
  // 省略
  $contents = get_option('sample_category_'.intval($category_id));

  // 省略
  } else if ($parent_category_slug === "hoge"){
    $thumbnail = isset($contents['hoge_img']) ? esc_html($contents['hoge_img']) : $default_thumbnail;
  }
  // 省略
}

三項演算子とかでisset()を通れば、元々書いてたコードが実行され、通らなかった場合はまぁ適当に。

普通にif分岐させても良いと思う。

// 省略
foreach ($categories as $category) {
  // 省略
  $contents = get_option('sample_category_'.intval($category_id));

  // 省略
  } else if ($parent_category_slug === "hoge" && isset($contents['hoge_img'])){
    $thumbnail = esc_html($contents['hoge_img']);
  }
  // 省略
}

参考: PHP 7.4:Trying to access array offset on value of type bool

参考: メッセージ:タイプ null の値で配列オフセットにアクセスしようとしています

ちなむ

ちなみに現状の php バージョンでは notice だが、そのうち warning 吐くようになるらしい。その記事のリンクを貼りたかったけどどっか行ってしまった……。

  • SNSでシェアしよう
  • Twitterでシェア
  • FaceBookでシェア
  • Lineでシェア
  • 記事タイトルとURLをコピー
トップへ戻るボタン

\ HOME /

トップへ戻る