PHP 変数型
PHP を使用しているとあまり実感がわかないものの一つに型があります。 C/C++ や パスカル などをやられた方なら理解しているものですが、 いきなりPHPを始めた方などの場合、型ってなーにって思われるかもしれません。
PHPは他の言語と比べるとかなり型の拘束がゆるい言語です。 ですが、言語処理的には当然ながら型は重要です。
主な型として、以下のものが挙げられます。
$a = $a + $a;という部分を $a = $a . $a; と変更してみましょう。 結果は数値ではなく文字列で返されるはずです。
ご覧いただいたようにPHPは型の拘束が非常にゆるい言語です。 ですが、それは初心者への障壁を下げる役割と同時に時として思いもかけない動作をする可能性もあるという事です。 精密な処理が求められる場合等は、常に自分が今どんな型を扱っているかを留意する注意深さが求められます。 型を意識した比較などには
=== //等しい
!== //等しくない
<<= //左辺は右辺より小さい
>>= //左辺は右辺より大きい
といった演算子を使用します。
- 整数型
- 浮動小数点型
- 論理型(boolean)
- 文字列型
- 配列型
- ストリーム型
- オブジェクト型
整数型 (integer)
123 や -4568 等の数値です。 整数型は32bit符号付整数として扱われます。 -2,147,483,648 から 2,147,483,647 までの整数値です。<?php $a = 124; echo $a,"<br>"; var_dump($a); ?>以下結果表示
124 int(124)また整数型は10進数以外に8進数や16進数形式での保存も可能です。 頭に0を付けると8進数での保存を行い、0xを付けると16進数での保存が行われます。
<?php $a = 012; echo $a,"<br>"; var_dump($a); echo "<br>"; $b = 0xf0; echo $b,"<br>"; var_dump($b); ?>以下結果表示
10 int(10) 240 int(240)さて、先程整数型が格納できる値の範囲を記しましたが、 もしこの範囲が超えてしまった場合はどうなるでしょうか? この場合は浮動小数点型に自動で切り替わります。 浮動小数点型はシステムにもよりますが、おおよそ10の14乗程の数値を扱えるようになっています。 ですから整数型には収まらないと判断したPHPエンジンは自動で浮動小数点型に換えてしまいます。 ここは大きい数値を扱う場合は注意が必要です。
<?php $a = 2000000000; echo $a,"<br>"; var_dump($a); $a = $a +$a; echo "<br>",$a,"<br>"; var_dump($a); ?>以下結果表示
2000000000 int(2000000000) 4000000000 float(4.0E+9)
浮動小数点型 (float,double,real)
10.4 や 2.123 等の小数点を含む数を指します。<?php $a = 12.4; echo $a,"<br>"; var_dump($a); $a = 12.4e5; echo "<br>",$a,"<br>"; var_dump($a); $a = 4e-5; echo "<br>",$a,"<br>"; var_dump($a); ?>以下結果表示
12.4 float(12.4) 1240000 float(1240000) 4E-005 float(4.0E-5)
論理型(boolean)
論理型は真偽を判定する場合によく使用されます。 true と false の二つがそれになります。 これは大文字と小文字の区別がありません。 ですから TRUE FALSE でもエラーではありません。 false を直接 echo 等で表示させると空表示になりますが、 trueの場合は 1 を表示します。
<?php
$a = true;
if($a){
echo $a,"- true <br>";
}else{
echo $a,"- false <br>";
}
var_dump($a);
?>
以下結果表示
1- true bool(true)
文字列型(string)
文字を格納すると文字列型となります。 解説で何度か触れていますが、文字列型は [番号] で文字そのものにアクセスできます。<?php $a = "abdef"; echo $a,"<br>"; var_dump($a); echo "<br>",$a[1],"<br>"; var_dump($a[1]); ?>以下結果表示
abdef string(5) "abdef" b string(1) "b"文字列と数値型は根本的に異なるものです。 ですがPHPにおいてはその事を忘れるくらいその壁を感じさせません。
<?php $a = "124"; echo $a,"<br>"; var_dump($a); $a = $a + $a; echo "<br>",$a,"<br>"; var_dump($a); ?>以下結果表示
124 string(3) "124" 248 int(248)数値を"" 等でくくってやる事で明示的に文字列にする事ができます。 変数に格納されたばかりでは文字列として認識されていますが、 それを足算して結果を見てみると数値型として認識されています。 PHPでは処理された演算によって変数を自動で認識してくれる部分があります。 ここでは + という算術演算子を使用していたので上記の結果が返されています。 もし、得たい結果が「124124」という文字列であった場合、「+」ではなく「.」結合演算子を使用するべきです。
$a = $a + $a;という部分を $a = $a . $a; と変更してみましょう。 結果は数値ではなく文字列で返されるはずです。
配列型(array)
配列型は一つの変数に複数の情報を格納する事ができます。 PHPではハッシュ(辞書)形式でも保存ができます。 また、二次元配列や三次元配列としても扱う事ができます。 配列の要素には文字列、数値型、これらを混合する事ができます。ストリーム型(stream)
ファイルストリーム等がこれにあたります。 ファイルストリームは他の変数型とは大きく異なります。 この型は演算を行うことを目的とするものではなく、その使用法は多くの場合決まったものです。データベース接続もストリーム型に分類されます。オブジェクト型(object)
クラスオブジェクトがここにあたります。オブジェクト型をvar_dumpでみるとプロパティ内容が一覧で確認することが可能です。プロパティの数などはクラス宣言に左右されます。型変換
settype関数で明示的に変数型を変換することが出来ます。 また、数値型から文字型への変換は""(ダブルクォート)などでくくる事でも実現できます。 面白いところでは、<?php $a = "123だよね"; $a = intval($a); echo $a,"<br>"; var_dump($a); ?>以下結果表示
123 int(123)という事もできます。 intval関数は値を整数値にして返すのですが、 その際、文字列の頭の123を見て、残りの文字列を切ってしまっているわけです。 ただし、これが逆の「だよね123」だったりした場合は、数値を認識できなくて0にリセットされてしまいます。
ご覧いただいたようにPHPは型の拘束が非常にゆるい言語です。 ですが、それは初心者への障壁を下げる役割と同時に時として思いもかけない動作をする可能性もあるという事です。 精密な処理が求められる場合等は、常に自分が今どんな型を扱っているかを留意する注意深さが求められます。 型を意識した比較などには
=== //等しい
!== //等しくない
<<= //左辺は右辺より小さい
>>= //左辺は右辺より大きい
といった演算子を使用します。
2008年 11月 4日ドキュメント作成
2008年 11月 4日ドキュメント更新