PHP バージョンによるpassword_hashの戻り値の違いについて

password_hash の IDE で表示される戻り値の型と、ドキュメントに書かれている内容が一致しなかったので調べました。

もともと、PHP7で動いている環境で VSCode のツールチップで表示された型は string|false|null でした。

しかし、ドキュメントをみると、null を返すことがどこにも書かれていませんでした。

試したところ、PHP8だとnullは返らないようでした。

以下が試したコードです。

password_hash('abcd', INVALID_PASSWORD_BCRYPT);

意図的に第二引数に不正な値を与えています。

PHP8だとこのコードはExceptionをthrowします。

一方で、PHP7.4.26の場合は、エラーにならずWarningとなり、nullが返りました。

確かにソースコードをみてもPHP7.4.2xはこのようにRETURN_NULLをしています。

PHP8ではこのようにRETURN_THROWSするようになっています。

たしかに、NULL が返るというのは直感的ではなく、トリッキーとまではいかないにしても使う側からするとNULLになることを意識しないといけない点が若干ストレスなので、PHP8の方が望ましい動作かなと思いました。

PHP

Posted by たみぼうず