ワードプレスサイトをPHP8.3に変えた時によく出る配列に関するワーニングやエラーの対処方法を解説いたします。

配列の存在しないキーや位置にアクセスした場合の警告やワーニング

Warning: Trying to access array offset on value of type null
Fatal error: Uncaught TypeError: Cannot access offset of type null

上記の2つのワーニングやエラーはPHP8.3以上でよく出ます。

例えば下記のようなコードで配列$settingsに’myname’というキーの名称が無い場合や$settingsが配列ではない場合にPHP8売\以降上記エラーやワーニングが出るようになりました。

$name = $settings['myname'];

対処方法

$name = ""; //$nameの初期化(初期化されていない場合のみ)
if(isset($settings['myname'])){ //この配列にキーmynameで指定する内容があるかどうかを検査
    $name = $settings['myname'];
}

配列でないものを連結する

例えば次のコードで$arr1, $arr2が共に配列でない場合はエラーとなります。

array_merge($arr1, $arr2);

エラー:
TypeError: array_merge(): Argument #2 must be of type array, null given

対処方法は配列かどうかを確かめて連結します

if (is_array($arr1) && is_array($arr2)) { //is_arrayで配列かどうかを調べます
   array_merge($arr1, $arr2);
}

下記のような書き方で配列として初期化していない変数に追加する場合もエラーになります。

$arr = '';
$arr[] = 'myvalue';

Fatal error: Uncaught TypeError: Cannot use string offset as an array

これは文字列として初期化された$arrに配列に追加する書式[]を使用したことによります。

implode()/join() に非配列を渡す

他にもimplode()/join() に非配列を渡すと下記のようなエラーが出ます

TypeError: implode(): Argument #2 ($array) must be of type ?array, null given

※この場合もis_arrayで配列かどうか確かめてからimplodeするような処理が必要でございます。

ご参考になりましたら幸いです

WordPress ワードプレスのPHP8.3への適合、アップデートの代行のご依頼・ご相談はWPドクターまでお気軽にお送りください