型の相互変換

PHP は、変数定義時に明示的な型定義を必要としません (または、サポートしません。)。 ある変数の型は、その変数が使用される文により定義されます。 これは、ある文字列を変数 var に代入した場合には、 var は文字列になることを意味しています。 ある整数値を var に代入した場合には、 その変数は整数になります。

PHP の自動型変換の例の一つは、加算演算子 '+' です。 オペランドのどれかが倍精度実数の場合、全てのオペランドは倍精度実数として 評価され、結果は倍精度実数になります。 その他の場合、オペランドは整数として解釈され、結果も整数になります。 この自動型変換はオペランド自体の型を変更するものではないということに 注意してください。 変わるのは、オペランドがどのように評価されるかだけです。

$foo = "0";  // $foo は文字列です(ASCII 48)
$foo++;      // $foo は文字列 "1" です(ASCII 49)
$foo += 1;   // ここでは、$foo は整数です (2)
$foo = $foo + 1.3;  // ここでは、$foo は倍精度実数です (3.3)
$foo = 5 + "10 Little Piggies";    // $foo は倍精度実数です (15)
$foo = 5 + "10 Small Pigs";   // $foo は整数です (15)
     

最後の二つの例が奇妙に思える場合には、文字列変換 を 参照ください。

ある変数を強制的にある特定の型として評価させたい場合には、 型キャスト の セクションを参照ください。 ある変数の型を変更したい場合には、settype() を参照してください。

変数型の定義

PHP は変数の型を定義し、(通常の場合、)必要に応じて変換するため、 ある変数の型がその時に何であるかが、常に明確であるわけでは ありません。 PHP は、変数の型を見つけるためのいくつかの関数を有しています。 これらは、 gettype()is_long()is_double()is_string()is_array()is_object() です。

型キャスト

PHP の型キャストは、C 言語と同様に動作します。 変換しようとする型の名前をキャストする変数の前に括弧に入れて 置きます。

$foo = 10;   // $foo は整数です
$bar = (double) $foo;   // $bar は倍精度実数です
      

可能なキャストを次に示します。

括弧の中でタブとスペースを使用することができることに注意してください。 従って、次の文は、機能的に等価です。

$foo = (int) $bar;
$foo = ( int ) $bar;
     

文字列変換

ある文字列が、数値として評価されるとき、 結果の値と型は、次のように定義されます。

文字列は、'.'、'e'、'E' のいずれかを含む場合に 倍精度実数として評価されます。 その他の場合は、整数として評価されます。

値は、文字列の最初の部分により与えられます。 文字列が、有効な数値データから始まる場合には、 これが値として使用されます。 その他の場合、値は 0 (ゼロ)になります。 有効な数値データとは、符号(オプション)の後に (オプションとして小数点を含む)一つ以上の数字があり、 その後に指数値(オプション)があるものです。 指数値は、'e' または 'E' の後に一つ以上の数字があるものです。

$foo = 1 + "10.5";      // $foo は倍精度実数です (11.5)
$foo = 1 + "-1.3e3";    // $foo は倍精度実数です (-1299)
$foo = 1 + "bob-1.3e3"; // $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) を参照してください。