【PHP入門】演算による型の自動変換 – 暗黙のキャスト

数値データには整数型(integer)と浮動小数点数型(float/double)があり、PHPでは数値に応じて自動で型を判別してくれます。

それでは異なるデータ型同士で演算を行なった結果のデータ型はどのようになるでしょうか?

PHPでは演算するデータ型に応じて自動で変換してくれます。その処理を暗黙のキャストと呼び、基礎知識になりますので、習得していきましょう。

なお、キャストについてはこちらの記事で解説しましたので、一緒にご覧ください。

暗黙のキャストについて

プログラムでは通常、異なるデータ型同士の演算を実行できません。

しかし、PHPでは異なるデータ型同士でもエラーなく処理を行うことができます。これは暗黙のキャストと呼ばれる自動型変換が実行されているためです。

次の例を見ていきましょう。

ソースコード

<?php

// $num1に整数型の1000を代入
$num1 = 1000;
// $num2に浮動小数点型の0.25を代入
$num2 = 0.5;
// $num1と$num2を加算し、$resultに代入
$result = $num1 * $num2;

// $resultの型と値を出力
echo '$result -> '.$result."\n";
echo '$result -> '.gettype($result)."\n";

?>

実行結果

$result -> 500
$result -> double

整数型と浮動小数点型を乗算した結果である$resultのデータ型はdoubleとなっています。

これは演算する際に、異なるデータ型がある場合、PHPが自動で整数型を浮動小数点型に自動で変換してくれているためです。

暗黙のキャストの優先順位

暗黙のキャストは演算対象のデータを同じ型に統一します。

どのデータ型で統一するかには優先順位があり、浮動小数点数 > 整数型 > 文字列となっています。

また、文字列の場合は数値に変換した結果が小数点以下を含む場合は浮動小数点数型、含まない場合は整数型となります。

文字列はシングルクォーテーションで囲んだ文字列

次の例を見てみましょう。

ソースコード

<?php

// $num1に整数型の1000を代入
$num1 = 1000;
// $num2に浮動小数点型の0.25を代入
$num2 = '0.5';
// $num1と$num2を加算し、$resultに代入
$result = $num1 * $num2;

// $resultの型と値を出力
echo '$result -> '.$result."\n";
echo '$result -> '.gettype($result)."\n";

?>

実行結果

$result -> 500
$result -> double

この例では、初めに文字列型の$num2がキャストされます。$num2のデータは0.5なので浮動小数点数型となり、$num1は整数型なので、こちらも浮動小数点数型へと変換されます。

なお、$num2に代入するデータが整数の場合は、実行結果のデータ型はinteger(整数型)となりますので、試してみてください。

まとめ

PHPでは暗黙のキャストと呼ばれる自動型変換が用意されています。これにより、キャストを明示的に記述することなく自然なコードを書くことができるようになります。

また、暗黙のキャストに対して、自身でキャストするコードを書く方法を明示的なキャストと呼びます。こちらは本記事導入部で紹介した記事にて解説しておりますので、是非ご覧ください。