PHP8系で「Uncaught TypeError: count(): Argument」エラーの対応方法
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になっていたため発生した模様。
具体的には以下のようなソースコードの場合にエラーが発生する。
<?php
ini_set( 'display_errors', 1 );
$hoge = NULL;
if( count($hoge) ){
echo 1;
}else{
echo 0;
}
ちなみにPHP7で上記ソースコードを実行するとFatal errorではなく、以下のようなWarningエラーとなる。
Warning: count(): Parameter must be an array or an object that implements Countable in /path/to/file.php on line xxxx
対応方法
引数を定義
引数を定義する。恐らく一番無難かと思われる。
$hoge = array();
引数をキャスト
count時に引数を(array)でキャストする。
if( count((array)$hoge) ){
引数が数えられる値かどうかを調べる
is_countable関数を使用し引数が数えられる値かどうか調べる。
if( is_countable($hoge) && count($hoge) ){
所感
こちらのサイトによるとPHP8系からはNULLを許容しない関数が増えたとのこと。
また、PHP9系からは未定義変数が使えなくなるという話なので、今後は変数を使う場合はきちんと定義するよう気をつけたいところ。
関連記事
-
-
PhpSpreadsheetで作成したエクセルファイルをPDFファイルに変換する方法
以前にPhpSpreadsheetでフォーマット用のエクセルを読み込み、指定した ...
-
-
FLASHから受信した画像をPHPで保存し、サムネイルも作る
■参考サイト ・FLASH http://www.ilovex.co.jp/bl ...
-
-
PHPのログイン認証をPEAR::Authパッケージで実装する方法
PHPのシステムである程度ちゃんとしたログインシステムが必要になった。今までログ ...
-
-
SendGridを使ってメールサーバを構築せずにPHPからメールを送信する方法
メールサーバを構築せずに独自ドメインのメールアドレスにてメール送信を行いたい。過 ...
-
-
PHPでスマホ(iPhone / Android)に画像をダウンロードさせる方法とダウンロード後の保存場所について
PHPで作ったシステムにスマホ(iPhone / Android)でアクセスし何 ...