Code Fix

初級

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パターンを実際に手で直すと、エラーメッセージのどこを読めばよいかが掴めます。

演習をはじめる

関連するエラー

広告
広告スロット(未設定)