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 型の値に配列オフセットでアクセスするな」と。
ちなみに自分の場合、 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 吐くようになるらしい。その記事のリンクを貼りたかったけどどっか行ってしまった……。