型の相互変換PHP は変数宣言時に明示的な型定義を必要としません。 型を定義しない場合、変数の型は保存する値によって決まります。 これは、変数 $var に文字列を代入した場合、 $var の型は文字列 (string) になることを意味しています。 その後、整数値を $var に代入すると、 その変数の型は整数 (int) になります。 コンテクスト(文脈)によっては、 PHP が値を別の型に自動変換しようとすることがあります。 自動変換が行われる異なるコンテクストが存在するのは、以下のとおりです:
変数を強制的にある特定の型として評価させたい場合は、 型キャスト のセクションを参照ください。 ある変数の型を変更したい場合は、settype を参照ください。 数値のコンテクストこれは、 算術演算子 を使った場合です。 このコンテクストでは、 オペランドのどちらかが float (または整数と解釈できない場合) の場合か、 両方のオペランドが float の場合、 結果の型は float になります。 そうでない場合、オペランドは整数として解釈され、 結果の型も整数になります。 PHP 8.0.0 以降では、いずれかのオペランドが解釈できない場合、 TypeError がスローされます。 文字列のコンテクストこれは、 echo, print や 文字列中の変数のパース、または 文字列演算子 を使った場合です。
値は文字列として解釈されます。
文字列として解釈できない場合、
TypeError がスローされます。
PHP 7.4.0 より前のバージョンでは、
整数と文字列のコンテクストこれは、 ビット演算子 を使った場合です。 全てのオペランドが文字列の場合、 結果の型も文字列になります。 そうでない場合、 オペランドは整数として解釈され、 結果の型も整数になります。 PHP 8.0.0 以降では、いずれかのオペランドが解釈できない場合、 TypeError がスローされます。 関数のコンテクストこれは、値が型付きの引数、型付きプロパティに渡された場合や、 戻り値の型を宣言している関数から値が返される場合です。 このコンテクストでは、値はその型の値でなければなりません。 これにはふたつ例外があります。 ひとつめは値の型が int で、 宣言されている型が float の場合、 整数が浮動小数点に変換されることです。 ふたつめは型が スカラー型、 または値がスカラー型に変換可能な場合で、 かつ型の自動変換モードが有効な場合(デフォルト)、 スカラー型の値だけが別の変換可能なスカラー型に変換される可能性があることです。 この振る舞いに関する詳細は、以下を参照ください: 警告
内部関数 は、 単一の型宣言における、型の自動変換union 型と型の自動変換
警告
例外として、値が文字列で、int と float が union に含まれていた場合、
型は既存の 数値形式の文字列 を解釈するセマンティクスによって決まります。
たとえば、
例1 union の型のひとつに変換される例
型キャスト型キャストは、変換しようとする型の名前を括弧で括り、 キャストする変数の前に置くことで、値を別の型に変換するものです。
使用可能なキャストを以下に示します:
警告
キャストのエイリアス 警告
警告
将来サポートされることを見越して、
以下の例は、リテラル文字列や変数を、バイナリ文字列にキャストします:
型の間でキャストを行う際の動作は、必ずしも明確ではありません。 詳細については、以下の節を参照ください:
|