PHP入門 型の相互変換

最終更新日

PHPはデータ型に関しては比較的寛容な言語ですが、値を特定の型に強制的に変換(キャスト)する必要がある場合があります。その方法を解説しています。

暗黙的な変換

PHPでは、その時々の状況で値を適切なデータ型へ変換することで、「それぞれの文脈に応じてできるだけなんらかの処理をしよう」とします。これを型の暗黙的な変換と言います。

明示的な変換(キャスト)

厳密な比較や演算をしたい場合、暗黙的な変換がされると困る場合があります。そのような場合は、キャストという仕組みを使います。値を特定の型に

構文:キャスト

(データ型)値

利用可能なキャスト型

データ型概要
(int)、(integer)整数型へのキャスト
(bool)、(boolean)論理型へのキャスト
(float)、(double)浮動小数点型へのキャスト
(string)文字列型へのキャスト
(binary)バイナリ文字列へのキャスト
(array)配列へのキャスト
(object)オブジェクトへのキャスト
<?php
var_dump((int)1530.95);     //結果:int(1530)     ➊
var_dump((int)-1530.95);    //結果:int(-1530)    ➋
var_dump((int)true);        //結果:int(1)        ➌
var_dump((string)true);     //結果:string(1)"1"  ➍
var_dump((int)false);       //結果:int(0)        ➎
var_dump((string)false);    //結果:string(0)""   ➏
var_dump((array)108);       //結果:array(1) {  [0]=> int(108) } ➐

➊と➋は浮動小数点リテラルを整数型にキャストする例です。この場合、値は(四捨五入ではない)ゼロの方向に丸められます。

➌から➏は論理リテラルを数値や文字列にキャストしています。この場合、trueは1に変換されfalseは0または空文字列に変換されます。

➐スカラー型から配列型への変換です。この場合、数値/文字列/論理型のいずれであっても要素を1つだけ持つ配列ができあがります。

数値を文字列に変換する特殊な方法として、変数をダブルクォートでくくってもかまいません。ダブルクォートの中で変数が展開され、その結果は文字列とみなされます。

$x = 1;
var_dump("$x");     //結果:string(1) "1"

文字列→数値の型キャスト

<?php
var_dump((int)'0b11');      //結果:int(0)      ➊
var_dump((int)'0777');      //結果:int(777)    ➊
var_dump((int)'0xFF');      //結果:int(0)      ➊
var_dump(bindec('0b11'));   //結果:int(3)      ➋
var_dump(octdec('0777'));   //結果:int(511)    ➋
var_dump(hexdec('0xFF'));   //結果:int(255)    ➋
var_dump((int)'1E4');       //結果:int(10000)    ➌
var_dump((float)'1E4');     //結果:float(10000)  ➌

➊のように’0b11’(2進数)や’0777’(8進数)、’0xFF’(16進数)をキャストした場合、いずれも正しく認識されず、先頭から数字として認識できる箇所までを抜き出します。よって、’0b11’であれば「b」の前までを抜き出し、0となるわけです。’0777’はすべて数字ですが、10進数と認識され、結果は777となります。これら2/8/16進数表現の文字列を正しく整数キャストするには、➋のような関数を利用してください。

n進数文字列を整数型に変換する関数

関数概要
bindec2進数を10進数に変換
octdec8進数を10進数に変換
hexdec16進数を10進数に変換

残る指数表現については問題ありません(➌)。int/float型共に正しく認識できます。