PHPリファレンス
UPDATE:2019年10月16日
PHP のキャスト=演算子における型変換(ジャグリング)
PHP4 PHP5 PHP7
1 Minute Note
- 型のジャグリングとは規則によるデータ型の自動(暗黙の)変換
- データ型の変換をキャストという
- 型変換はオペランド自体の型が変更されるのではなく、オペランドがどのように評価されるかの変換
- 文字列が数値として評価される場合
文字列の先頭に整数値や浮動小数点数値がある場合、その数値として評価される
文字列の先頭に数値がない場合は0と評価される
文字列に「.(ドット)」や「e や E」がある場合は浮動小数点数値として評価される
PHPには自動でデータ型を変換する機能があります。データ型の自動変換を型のジャグリングと言います。
型のジャグリング=データ型の自動(暗黙の)変換
POINT
- 型のジャグリングとは規則によるデータ型の自動(暗黙の)変換
- データ型の変換をキャストという
- 型変換はオペランド自体の型が変更されるのではなく、オペランドがどのように評価されるかの変換
型のジャグリングとは規則に応じて自動的に行われるデータ型の変換のことです。PHPは必要に応じてデータ型を自動的に変換します。データ型の変換をキャストといいます。
殆どの演算子はオペランド(値あるいは式)に対して前提条件があります。例えば、+ や – などの算術演算子のニ項演算子の場合、2つのオペランドが同じデータ型であることが前提条件になっています。そのためPHPでは前提条件に則るためにデータ型を自動的に変換します。
オペランドとは演算子の対象となる値のことです。
+ や – などの算術演算子の場合、左辺オペランドと右辺オペランドのデータ型は同じ型であることが前提条件。
1 2 | echo 1 + 2; echo 2 - 1; |
型のジャグリングには規則があります。PHPが行うジャグリングがどのような挙動か理解していないと、場合によっては意図しない結果が発生してしまうことがあります。
算術演算子の場合の型のジャグリング規則
1番目のオペランド型 | 2番目のオペランド型 | キャスト(変換)の規則 |
---|---|---|
整数 | 浮動小数点 | 整数→浮動小数点 |
整数 | 文字列 | 文字列→数値 変換後の数値が浮動小数点の場合は、整数→浮動小数点 |
浮動小数点 | 文字列 | 文字列→浮動小数点 |
型のジャグリング 整数 と 浮動小数点 の場合
1 2 3 4 5 6 | <!-- サンプルコード --> <?php $var = 10 + 12.5; echo $var."<br>\n"; echo gettype($var); ?> |
結果は
22.5
double
double
となります。
整数 10 は浮動小数点として計算されます。
整数 → 浮動小数点 型のジャグリングが行われています。
型のジャグリング 整数 と 文字列 の場合
1 2 3 4 5 6 | <!-- サンプルコード --> <?php $var = 10 + "10"; echo $var."<br>\n"; echo gettype($var); ?> |
結果は
20
integer
integer
となります。
文字列 “10”(「"(ダブルクォート)」で囲まれた 10 は通常文字列の扱い) は整数として計算されます。
文字列 → 整数 型のジャグリングが行われています。
文字列が数値として評価される場合
演算子のオペランドにおいて、数値が必要とされる場所で文字列が使用された場合、文字列は数値として評価されます。
POINT
- 文字列が数値として評価される場合
文字列の先頭に整数値や浮動小数点数値がある場合、その数値として評価される
文字列の先頭に数値がない場合は0と評価される
文字列に「.(ドット)」や「e や E」がある場合は浮動小数点数値として評価される
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | <!-- サンプルコード --> <?php $var = "String" + 1; echo $var.' '; echo gettype($var)."<br>\n"; $var = "6 String" - 1; echo $var.' '; echo gettype($var)."<br>\n"; $var = "1.3 String" * 2; echo $var.' '; echo gettype($var)."<br>\n"; $var = "10 String." - 1; echo $var.' '; echo gettype($var)."<br>\n"; ?> |
結果は
1 integer
5 integer
2.6 double
9 integer
5 integer
2.6 double
9 integer
となります。
サンプルコード
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 | <!-- サンプルコード --> <h3>型のジャグリング 整数と浮動小数点</h3> <?php $var = 10 + 12.5; echo $var."<br>\n"; echo gettype($var); ?> <h3>型のジャグリング 整数と文字列</h3> <?php $var = 10 + "10"; echo $var."<br>\n"; echo gettype($var); ?> <h3>型のジャグリング 浮動小数点と文字列</h3> <?php $var = 10.2 + "12.5"; echo $var."<br>\n"; echo gettype($var); ?> <h3>文字列が数値として評価される</h3> <?php $var = "String" + 1; echo $var.' '; echo gettype($var)."<br>\n"; $var = "6 String" - 1; echo $var.' '; echo gettype($var)."<br>\n"; $var = "1.3 String" * 2; echo $var.' '; echo gettype($var)."<br>\n"; $var = "10 String." - 1; echo $var.' '; echo gettype($var)."<br>\n"; ?> |
実行結果
型のジャグリング 整数と浮動小数点
22.5
double
22.5
double
型のジャグリング 整数と文字列
20
integer
型のジャグリング 浮動小数点と文字列
22.7
double
文字列が数値として評価される
1 integer
5 integer
2.6 double
9 integer
タグ(=記事関連ワード)
日付
公開日:2017年3月21日
最終更新日:2019年10月16日
最終更新日:2019年10月16日
このカテゴリの他のページ
この記事へのコメント
トラックバックurl
https://wepicks.net/phpref-cast/trackback/