Google

NAME="GENERATOR" CONTENT="Modular DocBook HTML Stylesheet Version 1.7">

型の相互変換

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

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

$foo = "0";  // $foo は文字列です (ASCII 48)

$foo += 2;   // ここでは、$foo は整数です (2)
$foo = $foo + 1.3;  // ここでは、$foo はfloatです (3.3)
$foo = 5 + "10 Little Piggies";    // $foo は整数です (15)
$foo = 5 + "10 Small Pigs";   // $foo は整数です (15)

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

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

本節の例をテストしたい場合には、 var_dump() を使用することが可能です。

注意 配列への自動変換の動作は現時点で定義されていません。

$a = 1;       // $a は整数です
$a[0] = "f";  // $a は配列になり、$a[0] には "f" が入ります

上の例で明らかに $a は配列になりますが、最初の要素は 'f' になります。 次の例を見てみましょう。

$a = "1";     // $a は文字列です。
$a[0] = "f";  // 文字列オフセットは何ですか? どうなりますか?

PHPは文字列への添字を配列への添字と同じ構文を使用してサポートして いるため、上の例は、$a は最初の要素が "f" の配列となるのか "f" が文字列 $a の最初の文字になるのかが不明であるという問題を生じます。

このため、最新バージョンの PHP 3.0.12 および PHP 4.0b3-RC4 では、 この自動変換の結果は未定義(undefined)とみなします。 しかし、修正方法が議論されています。

型キャスト

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

$foo = 10;   // $foo は整数です
$bar = (float) $foo;   // $bar はfloatです

使用可能なキャストを以下に示します。

  • (int), (integer) - 整数へのキャスト

  • (bool), (boolean) - 論理値へのキャスト

  • (float), (double), (real) - floatへのキャスト

  • (string) - 文字列へのキャスト

  • (array) - 配列へのキャスト

  • (object) - オブジェクトへのキャスト

注意 文字列に変数をキャストする代わりに、2重引用符で変数を括ることも 可能です。

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

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

型の間でキャストを行う際の動作は、必ずしも明確ではありません。詳 細については、以下の節を参照下さい。

配列から文字列にキャストまたは強制的な変換を行った場合、結果は、 単語Arrayとなります。オブジェクトから文字列に キャストまたは強制的な変換を行った場合、結果は、単語 Objectとなります。

スカラーまたは文字列変数から配列にキャストを行う時、変数は配列の 最初の要素になります。

$var = 'ciao';
$arr = (array) $var;
echo $arr[0];  // 'ciao' を出力します。

スカラーまたは文字列変数からオブジェクトにキャストを行う時、変数 はオブジェ¯トの属性の一つになります。その属性の名前は 'scalar' に なります。

$var = 'ciao';
$obj = (object) $var;
echo $obj->scalar;  // 'ciao' を出力します。