💡 この記事でわかること
- データ型とは何か、なぜ意識する必要があるのか
- 文字列(string)・整数(int)・小数(float)・真偽値(bool)の違い
- var_dump()・gettype()で型を調べる方法
- (int)・(string)・(float)による型変換(キャスト)
- フォームの値が文字列になる点、
==と===の違い
1. データ型とは?
データ型とは、
👉 プログラムが扱う値の「種類」のことです。「文字列」「整数」「小数」「真偽値」などの種類があり、種類によってできる操作が変わります。
💡 PHPでは変数を作るときに型を宣言しませんが、値そのものには必ず型があります。たとえば数値の足し算は +、文字列の連結は .(ドット)と、型によって使う記号も変わります。
<?php
echo 1 + 2; // 3(数値の足し算)
echo "1" . "2"; // 12(文字列の連結)変数や echo の基本をまだ確認していない場合は、先にこちらを読んでおくとスムーズです。
👉 PHPの基本文法(<?php ?>・echo・変数)についての記事はこちら
2. 文字列型(string)
文字列は文字の並びを表す型です。シングルクォート ' かダブルクォート " で囲みます。
<?php
$name = "太郎";
echo $name . "さん"; // 太郎さん(. で連結)
echo str_repeat("=", 10); // ==========(繰り返し)
$message = "こんにちは";
$message .= "、太郎さん"; // .= で末尾に追加
echo $message; // こんにちは、太郎さん👉 連結は .、末尾への追加は .= を使います。文字を繰り返したいときは str_repeat() を使います(* は使えません)。
💡 日本語の文字数を数えるときは strlen() ではなく mb_strlen() を使います。strlen("太郎") はバイト数の 6 を返しますが、mb_strlen("太郎") は文字数の 2 を返します。
ダブルクォートの中では変数がそのまま展開されるため、数値を文字列に混ぜるときも型変換なしで書けます。
<?php
$price = 500;
$count = 3;
echo "合計 {$price} 円 / 残り {$count} 個"; // 合計 500 円 / 残り 3 個3. 数値型(int・float)
- int(整数):
10、-3、0など、小数点のない数 - float(小数):
3.14、0.5、-1.0など、小数点のある数
<?php
$a = 7;
$b = 2;
echo $a + $b; // 9
echo $a - $b; // 5
echo $a * $b; // 14
echo $a / $b; // 3.5 ← 割り切れないと float になる
echo $a % $b; // 1 ← 余り
echo $a ** $b; // 49 ← 7 の 2 乗
echo intdiv($a, $b); // 3 ← 整数の商(切り捨て)👉 / は、割り切れれば int、割り切れなければ float を返します(4 / 2 は 2、7 / 2 は 3.5)。整数の商がほしいときは intdiv() を使います。
💡 float の計算では、0.1 + 0.2 が 0.3 ちょうどにならず、わずかな誤差が出ることがあります。コンピューターが小数を2進数で扱う都合によるもので、PHPに限らず多くの言語で起こります。金額の計算など厳密さが必要な場面では注意してください。
4. 真偽値型(bool)
bool は、true(真)か false(偽)の2つの値だけを持つ型です。小文字で書くのが慣習です。
<?php
$isActive = true;
var_dump(3 > 1); // bool(true)
var_dump(10 == 5); // bool(false)👉 比較演算子(>、<、==、!= など)の結果は bool になります。if文の条件では、この bool の値によって処理が分かれます。
5. 型を調べる:var_dump() / gettype()
値や変数の型を調べるには var_dump() を使います。型と値の両方を表示してくれるので、「思ったとおりの型になっていない」ときの原因調査に役立ちます。
<?php
var_dump("太郎"); // string(6) "太郎"
var_dump(20); // int(20)
var_dump(3.14); // float(3.14)
var_dump(true); // bool(true)
var_dump("100"); // string(3) "100" ← クォートで囲むと文字列
echo gettype(20); // integer
echo gettype(3.14); // double💡 gettype() が返す名前は、int が integer、float が double、bool が boolean と、昔ながらの呼び方になっています。値だけをざっと確認したいときは var_dump() を使えば十分です。
6. 型変換(キャスト):(int) / (string) / (float)
ある型の値を別の型に変換することを型変換(キャスト)と呼びます。変換したい型を ( ) で囲んで値の前に書きます。
<?php
$price = "500";
echo (int)$price + 100; // 600(文字列を整数にしてから計算)
$count = 3;
echo "残り " . (string)$count . " 個"; // 残り 3 個
echo (float)"1.5" * 2; // 3👉 PHPは、数値として解釈できない文字列を (int) してもエラーにならず、0 や途中までの数値になります。意図しない値になりやすいので、フォーム入力などは is_numeric() で事前に確認すると安全です。
<?php
var_dump((int)"abc"); // int(0)
var_dump((int)"12個"); // int(12)
var_dump(is_numeric("500")); // bool(true)
var_dump(is_numeric("abc")); // bool(false)7. フォームから受け取った値は文字列
フォームから送られてくる値($_POST や $_GET)は、数字を入力しても文字列(string)として届きます。
<?php
$age = $_POST["age"] ?? ""; // 例: "20"(文字列)
echo $age + 1; // 21(PHPは "20" を自動で数値に変換する)
echo (int)$age + 1; // 21(明示的に変換しておくとより安全)👉 PHPは "20" + 1 のような計算を自動で数値に変換してくれます(Pythonなどとは異なる点です)。ただし "20円" のように数字以外が混ざっていると、PHP 8では警告が出て意図しない結果になります。
💡 送信されていないキーをそのまま参照すると警告が出るため、$_POST["age"] ?? "" のように「なければ空文字」を用意しておきます。受け取った値は (int) などで明示的に変換・検証してから使うのが基本です。
8. == と === の違い(ゆるい比較・厳密な比較)
PHPには「等しいか」を調べる演算子が2種類あります。
==(ゆるい比較):型が違っても自動で変換してから値を比べる===(厳密な比較):型も値も一致していないとfalse
<?php
var_dump(1 == "1"); // bool(true) 値だけ見ると等しい
var_dump(1 === "1"); // bool(false) int と string で型が違う
var_dump("0" == false); // bool(true) ゆるい比較は直感に反することがある
var_dump("0" === false);// bool(false)👉 予期しない一致を避けるため、基本は === を使うのがおすすめです。なお、ゆるい比較の細かい挙動はPHP 8で一部変更されているため、古い記事の結果と違って見えることがあります。
9. データ型 早見表
| 型 | gettype()の表示 | 例 | 主な用途 |
|---|---|---|---|
| 文字列 | string | "太郎"、'PHP' | 文字・テキスト |
| 整数 | integer | 10、-3、0 | 個数・回数 |
| 小数 | double | 3.14、0.5 | 割合・金額 |
| 真偽値 | boolean | true、false | 条件判定 |
| 配列 | array | [1, 2, 3] | 複数の値(別記事で解説) |
| null | NULL | null | 値がないことを表す |
10. まとめ
- 主な型は string・int・float・bool の4つ(ほかに array・null)
- 型は
var_dump()やgettype()で調べられる - 変換は
(int)・(string)・(float)。PHPは(int)"abc"でもエラーにならず0になる点に注意 - フォームの値(
$_POST/$_GET)は文字列。PHPは自動で数値化するが、(int)で明示的に変換すると安全 - 比較は基本
===(型の一致まで確認)を使う
👉 「フォームの値は文字列」「比較は ===」の2つを意識するだけで、PHP初心者がよく出会うトラブルの多くを避けられます。実際に var_dump() で型を確認しながら、小さなコードを書いて慣れていきましょう。