count()にnullを渡したときのTypeErrorの原因
count()にnullを渡すと、PHP8ではTypeErrorが投げられます。関数が値を返し忘れてnullになった変数をそのままcount()に渡すと、ここで止まります。
エラーメッセージの読み方
Fatal error: Uncaught TypeError: count(): Argument #1 ($value) must be of type Countable|array, null given in main.php:6
main.php- ファイル名
6- 行番号 — 実際にクラッシュした行
TypeError- 例外クラス — 何が起きたか。ここを検索するのが最短です
count(): Argument #1 ($value) must be of type Countable|array, null given- 内容 — どの値が問題だったか
このエラーが出る典型パターン
パターン1
1 <?php 2 function getItems() { 3 return null; ^ 4 } 5 $items = getItems(); 6 echo count($items);
Fatal error: Uncaught TypeError: count(): Argument #1 ($value) must be of type Countable|array, null given in main.php:6
getItems()がnullを返しているため、count()に配列ではなくnullが渡っています。PHP8ではcount(null)はTypeErrorになります。
直し方: null を [] にします。
広告
広告スロット(未設定)
パターン2
1 <?php 2 function findUsers() { 3 return null; ^ 4 } 5 $users = findUsers(); 6 echo count($users);
Fatal error: Uncaught TypeError: count(): Argument #1 ($value) must be of type Countable|array, null given in main.php:6
戻り値忘れの関数はnullを返します。count()にnullを渡すとPHP8では致命的エラーになります。
直し方: null を [] にします。
パターン3
1 <?php 2 function loadTags() { 3 return null; ^ 4 } 5 $tags = loadTags(); 6 echo count($tags);
Fatal error: Uncaught TypeError: count(): Argument #1 ($value) must be of type Countable|array, null given in main.php:6
空の配列を返すつもりがnullのままです。count(null)はPHP7の警告とは違いPHP8では例外になります。
直し方: null を [] にします。
よくある誤解
「PHP7と同じでcount(null)は0を返すだけ」という古い情報は8系には通用しません。PHP7では警告付きで0を返していましたが、8ではTypeErrorとして致命的エラーになりました。
まとめ
count()にnullを渡したときのTypeErrorの原因は初級でつまずきやすい項目です。上の3パターンを実際に手で直すと、エラーメッセージのどこを読めばよいかが掴めます。