変数の型変更(ジャグリング)
PHP では、宣言された変数で変数の型を指定する必要はありません (またはサポートしません)。変数の型は、変数が使用されるコンテキストによって決まります。つまり、変数 var に文字列を代入する場合です。 var は文字列変数になります。 var に整数を代入すると、整数変数になります。
PHP が変数の型を自動的に変換する例としては、加算演算子「+」があります。いずれかのオペランドが double の場合、すべてのオペランドが double として評価され、結果も double になります。それ以外の場合、オペランドは整数とみなされ、結果は整数になります。これは各オペランド自体の変数タイプには影響せず、唯一の変更は計算中のオペランドの処理方法であることに注意してください。
$foo = "0"; // $foo は値が「0」の文字列 (ASCII 48)
$foo++; // $foo は値が「1」の文字列 (ASCII 49)
$foo += 1; // $foo は整数 (2)
$foo = $foo + 1.3; // $foo は倍精度 (3.3)
$foo = 5 + "10 Little Piggies"; (15)
$foo = 5 + "10 匹の子豚" // $foo は整数です (15)
上記の例の最後の 2 つの式が少し奇妙に見える場合は、「文字列変換」セクションを参照してください。
変数を強制的に固定型として評価したい場合は、「キャスト」セクションを参照してください。変数の型を変更したい場合は、関数「settype()」の説明を参照してください。
変数の型を決定する
PHP は変数自体の型を決定し、通常は必要に応じてそれらをキャストするため、特定の変数の型が常に明らかであるとは限りません。 PHP には、この変数の型を調べる関数が含まれています。これらの関数は、gettype()、is_long()、is_double()、is_string()、is_array()、および is_object() です。
型キャスト
PHP での型強制は C 言語とほぼ同じです。強制される変数の前に必要な型を括弧内に記述します。
$foo = 10; // $foo は整数
$bar = (double) $foo; // $bar は double です。
次の強制メソッドが許可されます。
(int), (integer) – 整数に強制変換
(real)、(double)、(float) – double に強制します
(文字列) – 文字列に強制変換します
(配列) – 配列に強制変換
(オブジェクト) – オブジェクトへの強制
かっこ内ではタブとスペースを使用できるため、次のステートメントは同等であることに注意してください。
$foo = (int) $bar;
$foo = ( int ) $bar;
文字列変換
文字列が数値として評価される場合、その結果と型は以下のように決定されます。
この文字列に文字「.」、「e」、または「E」が含まれている場合は double 型の変数として扱われ、それ以外の場合は整数として扱われます。
この文字列の値はプレフィックスによって決まります。文字列が有効な数値データで始まる場合、その数値データが文字列の評価の対象となる値となります。それ以外の場合、値はゼロです。有効な数値データは次の表記に従い、その後に 1 つ以上の数字 (小数点を含む場合があります)、その後にオプションの指数が続きます。指数は、1 つ以上の数字の後に「e」または「E」が続くことで形成されます。
$foo = 1 + "10.5"; // $foo は倍精度 (11.5)
$foo = 1 + "-1.3e3" // $foo は倍精度 (-1299)
$foo = 1 + "bob -1.3 e3"; // $foo は整数 (1)
$foo = 1 + "bob3"; // $foo は整数 (1)
$foo = 1 + "10 Small Pigs"; // $foo は整数( 11)
$foo = 1 + "10 Little Piggies" // $foo は整数 (11)
// この文字列には文字 'e' が含まれます。
詳細については、Unix マニュアルの strtod(3) セクションを参照してください。