【PHP】暗黙のキャスト – 型の自動変換
変数や値は異なる型同士では演算できません。
しかし、PHPは『暗黙のキャスト』と呼ばれる自動型変換により、型を意識せずにプログラミングすることができます。
ここでは暗黙のキャストについて解説します。
検証環境
暗黙のキャスト
暗黙のキャストは“型を自動変換する仕組み”です。
プログラムでは通常、異なる型同士は演算できないため、キャストで型を統一する必要があります。
しかし、PHPは暗黙のキャストにより、演算時に型が異なる場合は、自動で型を変換・統一します。
サンプル
実際のプログラムで暗黙のキャストの動作を確認します。
整数型と浮動小数点数型の演算では浮動小数点数型に自動で統一されます。
<?php
// 整数型
$num1 = 1000;
// 浮動小数点数型
$num2 = 0.5;
___ih_hl_start
$result = $num1 * $num2;
___ih_hl_end
echo '[ $result ]'."\n";
var_dump($result);
?>
$ php sample.php
[ $result ]
float(500)
8行目は整数型の$num1
と浮動小数点数型の$num2
を乗算演算です。
暗黙のキャストにより$num1
の値は浮動小数点数型に変換され、演算結果も浮動小数点数型になります。
その演算結果を代入した$result
の型も実行結果のとおり、浮動小数点数型になっています。
優先順位
暗黙のキャストはどの型で統一するかの優先順位があります。
演算の種類により、優先順位が変わりますが、算術演算では“浮動小数点数 > 整数型”の順です。
また、算術演算における文字列型は数値に変換した結果が小数点以下を含む場合は浮動小数点数型、含まない場合は整数型に変換されます。
<?php
// 整数型
$num1 = 1000;
// 文字列型
$num2 = '0.5';
___ih_hl_start
$result = $num1 * $num2;
___ih_hl_end
echo '[ $result ]'."\n";
var_dump($result);
?>
$ php sample.php
[ $result ]
float(500)
8行目は整数型と文字列型の乗算演算です。
処理の流れは、初めに文字列型の$num2
が浮動小数点数型にキャストされます。
この時点では整数型と浮動小数点数型の演算になるため、整数型の$num1
を浮動小数点数型にキャストします。
型を統一できたため、乗算演算を実行します。
演習問題
次の実行結果になるような下記条件を満たすプログラムを作成し、整数型と浮動小数点数型の値を乗算した結果が浮動小数点型になることをプログラムで確認してください。
$value1
に整数型の123
を記憶$value2
に浮動小数点数型の0.25
を記憶$result
に$value1
を$value2
で乗算した結果を記憶$result
の型を出力
$result(value) : 30.75
$result(type) : double
次の実行結果になるような下記条件を満たすプログラムを作成し、整数型と文字列型の値で加算した結果が整数型になることをプログラムで確認してください。
$value1
に整数型の123
を記憶$value2
に文字列型の3
を記憶$result
に$value1
を$value2
で加算した結果を記憶$result
の型を出力
$result(value) : 126
$result(type) : integer
次の実行結果になるような下記条件を満たすプログラムを作成し、整数型と文字列型の値で減算した結果が浮動小数点数型になることをプログラムで確認してください。
$value1
に整数型の123
を記憶$value2
に文字列型の0.2
を記憶$result
に$value1
を$value2
で減算した結果を記憶$result
の型を出力
$result(value) : 122.8
$result(type) : double