勉強したことのメモ

Webエンジニア / プログラマが勉強したことのメモ。

PHP8系で「Uncaught TypeError: count(): Argument」エラーの対応方法

  PHP

PHP8系で「PHP Fatal error: Uncaught TypeError: count(): Argument #1 ($value) must be of type Countable|array, null given in」というエラーログが見受けられた。7系だと問題無く動いていたページだったがPHP8系だとFatal errorになり動作しなくなった。以下に原因と対応方法をメモ。

 

原因

count関数を使用する際に引数がNULLになっていたため発生した模様。

具体的には以下のようなソースコードの場合にエラーが発生する。

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
<?php
ini_set( 'display_errors', 1 );
$hoge = NULL;
if( count($hoge) ){
echo 1;
}else{
echo 0;
}
<?php ini_set( 'display_errors', 1 ); $hoge = NULL; if( count($hoge) ){ echo 1; }else{ echo 0; }
<?php
ini_set( 'display_errors', 1 );
$hoge = NULL;
if( count($hoge) ){
    echo 1;
}else{
    echo 0;
}

ちなみにPHP7で上記ソースコードを実行するとFatal errorではなく、以下のようなWarningエラーとなる。

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
Warning: count(): Parameter must be an array or an object that implements Countable in /path/to/file.php on line xxxx
Warning: count(): Parameter must be an array or an object that implements Countable in /path/to/file.php on line xxxx
Warning: count(): Parameter must be an array or an object that implements Countable in /path/to/file.php on line xxxx

 

対応方法

引数を定義

引数を定義する。恐らく一番無難かと思われる。

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
$hoge = array();
$hoge = array();
$hoge = array();

引数をキャスト

count時に引数を(array)でキャストする。

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
if( count((array)$hoge) ){
if( count((array)$hoge) ){
if( count((array)$hoge) ){

引数が数えられる値かどうかを調べる

is_countable関数を使用し引数が数えられる値かどうか調べる。

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
if( is_countable($hoge) && count($hoge) ){
if( is_countable($hoge) && count($hoge) ){
if( is_countable($hoge) && count($hoge) ){

 

所感

こちらのサイトによるとPHP8系からはNULLを許容しない関数が増えたとのこと。

また、PHP9系からは未定義変数が使えなくなるという話なので、今後は変数を使う場合はきちんと定義するよう気をつけたいところ。

 - PHP

  関連記事

composerでライブラリのインストールとインストール時のエラー対応方法

composerでライブラリをインストールする際に「The following ...

PHPからLINEのMessaging APIにリクエストし通知を送る方法

LINEから「2025/3/31にLINE Notifyのサービスが終了する」と ...

DTIのVPSにCodeigniter3を導入する方法

DTIのVPSにPHPフレームワークのCodeigniter3系をインストールし ...

mpdfで「The /e modifier is …」エラー発生時の対応方法

pdf関連のPHPライブラリ「mPDF」を使っているページがエラーログにのってお ...

PHPのセッションでログイン、ログアウトの管理。あとセッションが保存されない場合の対処。

セッションはほとんど使ったことがなく、 色々つまづいたのでメモ。 やりたかった事 ...

S