PHPの型ジャグリング(自動型変換)とは?仕組みと型キャストの使い方を解説
型ジャグリング(Type Juggling)とは
PHPは動的型付け言語として知られています。PHPでは変数の型を明示的に宣言する必要がなく、そもそも型宣言そのものがサポートされていません。C、C++、Javaとは異なり、PHPの変数の型は代入された値によって決まり、その逆ではありません。さらに、変数に異なる型の値を代入すると、変数の型もそれに合わせて変化します。このようにPHPが変数の型を動的に扱う仕組みのことを「型ジャグリング」と呼びます。
$var = "Hello"; // この時点で変数は文字列型 $var = 100; // 同じ変数が今度は int 型になる
型ジャグリングは、式の計算中にも発生します。次の例では、数字を含む文字列変数が、加算式を評価する際に自動的に整数へと変換されます。
例:文字列と数値の加算
<?php $var1 = 100; $var2 = "100"; $var3 = $var1 + $var2; var_dump($var3); ?>
出力結果
int(200)
数値以外の文字が含まれる場合の挙動
文字列が数字で始まっている場合、計算の実行時には末尾の数値以外の文字が無視されます。ただし、PHPパーサーは次のような通知(Notice)を発します。
<?php $var1 = 100; $var2 = "100 days"; $var3 = $var1 + $var2; var_dump($var3); ?>
出力結果
PHP Notice: A non well formed numeric value encountered in ... int(200)
補足: PHP 8以降ではこの挙動が変更されています。先頭が数値の文字列("100 days" など)に対する算術演算では、Notice の代わりに Warning「A non-numeric value encountered」が発生します。また、先頭が数値でない文字列("abc" など)を算術演算に使用すると TypeError がスローされ、スクリプトの実行が中断されるため注意が必要です。
型キャストによる明示的な型変換
型キャストを使うと、変数を特定の型として扱うよう強制できます。次のスクリプトは、さまざまな型キャスト演算子の使用例です。
<?php $var1 = 100; $var2 = (boolean)$var1; $var3 = (string)$var1; $var4 = (array)$var1; $var5 = (object)$var1; var_dump($var2, $var3, $var4, $var5); ?>
出力結果
bool(true)
string(3) "100"
array(1) {
[0]=>
int(100)
}
object(stdClass)#1 (1) {
["scalar"]=>
int(100)
}主な型キャスト演算子は以下のとおりです。
- (int) / (integer) ー 整数へキャスト
- (float) / (double) ー 浮動小数点数へキャスト
- (string) ー 文字列へキャスト
- (bool) / (boolean) ー 論理値へキャスト
- (array) ー 配列へキャスト
- (object) ー オブジェクトへキャスト
ダブルクォートによる文字列への変換
変数を文字列へキャストするには、ダブルクォートで囲む方法もあります。
<?php $var1 = 100.50; $var2 = (string)$var1; $var3 = "$var1"; var_dump($var2, $var3); ?>
出力結果
string(5) "100.5" string(5) "100.5"
このように、PHPの型ジャグリングと型キャストの仕組みを理解しておくことで、意図しない型変換によるバグを防ぎ、より安全で予測しやすいコードを書くことができます。
-
PHPのinstanceof演算子とは?オブジェクトの型判定方法をわかりやすく解説
はじめにPHPでは、ある変数が特定のクラスのオブジェクト(インスタンス)であるかどうかを判定できます。この目的のために用意されているのが、instanceof 演算子です。instanceof演算子を使うことで、オブジェクト指向プログラミングにおいて型のチェックを行い、安全で堅牢なコードを書くことが可能になります。基本構文$var instanceof クラス名この演算子は、$var が指定したクラスのオブジェクトであればブール値の TRUE(true) を返し、そうでなければ FALSE(false) を返します。基本的な使用例次の例では、instanceof演算子を使って、変数 $a がユ
-
PHPのpi()関数とは?使い方と定義済み定数との対応を実例付きで解説
pi()関数の定義と使い方PHPのpi()関数は、数学定数π(円周率)の値を返す関数です。戻り値はfloat型の「3.14159265359」であり、PHPにあらかじめ定義されている定数M_PIとまったく同じ値になります。構文pi ( void ) : floatパラメータこの関数は引数を受け取りません。引数なしでそのまま呼び出すことができます。戻り値pi()関数は数学定数πの値を返し、定義済みの数学定数M_PIと等価です。数式の中では、M_PIの代わりにpi()関数を使うこともできます。対応するPHPバージョンこの関数はPHP 4.x、PHP 5.x、PHP 7.xのすべてのバージョンで利用