先日、会社で「intval と int キャストって、何が違うんですか?」と聞かれ、「ウヴォアー」ってなったので調査。
intval
https://www.php.net/manual/en/function.intval.php
型変換を行う関数なので、引数は mixed。知らなかったのだけど、第二引数があって、何進数なのかを指定できる。デフォルトは十進数。
intval のマニュアル内で int キャストについて言及されているのは次の箇所
Strings will most likely return 0 although this depends on the leftmost characters of the string. The common rules of integer casting apply.
「文字列はだいたい0を返す。最左翼にある文字に強く依存し、int キャストと同じルールに従う」 と書いてある。
integer casting
https://www.php.net/manual/ja/language.types.integer.php#language.types.integer.casting
int に値を明示的に変換するには、キャスト (int) または (integer) のどちらかを使用してください。しかし、多くの場合、演算子、関数、制御構造が int 引数を必要とする場合、値は自動的に変換されるため、 キャストを使用する必要はありません。 関数 intval() を用いて値を整数に変換することも可能です。
resource を int に変換すると、その結果は一意なリソース番号となります。 これは、その resource に対して PHP が実行時に割り当てた番号です。
型の相互変換 を参照ください。
おまけリンク
Type Juggling 型の相互変換
https://www.php.net/manual/ja/language.types.type-juggling.php
実際の比較
マニュアル上はよく分からないということになったので、動かしてみよう。
結果は、想定されるケースの大体において、一緒でした。
まとめ
intval と integer casting は実用上は大体一緒。
しかし、intval
であれば進数指定も可能なので、2つの存在は等価ではないです。またマニュアル上も等価であることは示していませんでした。
※暇があったら、ソースコードの方も見てみます。