PHPは非常に柔軟な言語で、多くの場合、データが数値か文字列かを自動で判断して処理してくれます。しかし、データベースのように厳密なデータ型を要求するシステムと連携する際には、この柔軟性が予期せぬエラーの原因になることがあります。
特に、URL経由で受け取る$_GET
の値は、たとえ数字であっても、PHP上では「文字列」として扱われます。
この記事では、PHPの「データ型」の基本、変数の型を正確に調べる方法、そして意図した型に変換する「キャスト」というテクニックについて解説します。
1. PHPの基本的なデータ型を理解する
まず、PHPには以下のような基本的なデータの種類(データ型)があることを理解しましょう。
string
(文字列): “こんにちは” や “abc” といった文字のデータ。int
(整数 / integer):10
や-123
といった小数点のない数値。array
(配列): 複数の値をまとめて格納するデータ。bool
(論理値 / boolean):true
(真) またはfalse
(偽) のどちらかを表すデータ。
PHPは、変数に値が代入される際に自動でデータ型を判断してくれる「弱い(ルーズな)型付け言語」ですが、プログラマが型を意識することは、バグの少ない安全なコードを書く上で非常に重要です。
2. 変数の型と値を詳しく調べるvar_dump()
echo
やprint_r
は変数の「値」を表示するのに便利ですが、変数の「データ型」までは分かりません。そこで役立つのがvar_dump()
関数です。
var_dump()
は、変数のデータ型、サイズ(長さ)、そして値といった詳細な情報を出力してくれる、強力なデバッグツールです。
var_dump()
の使用例: detail.php?id=7
というURLにアクセスした際に、$_GET['id']
をvar_dump()
で見てみましょう。
<?php
// URLから受け取ったidの情報を詳しく表示する
var_dump($_GET['id']);
?>
ブラウザ上の出力結果: string(1) "7"
これは、「データ型はstring(文字列)で、長さは1文字、値は”7″です」という意味です。7
という数字に見えますが、PHPはこれを文字列として受け取っていることが明確に分かります。
3. なぜ型変換が必要なのか?
では、なぜ「文字列の”7″」を「整数の7」にわざわざ変換する必要があるのでしょうか。
- データベースとの連携: データベースのテーブル設計では、カラムごとに
INT
(整数型)やVARCHAR
(文字列型)といった厳密なデータ型が決められています。id
カラムがINT
型で定義されている場合、そこに文字列の"7"
を渡すのではなく、整数の7
を渡すのが正しい作法です。これにより、意図しない動作やエラーを防ぎます。 - 厳密な比較: PHPには
==
(等しい)と===
(厳密に等しい)という2つの比較演算子があります。7 == "7"
はtrue
になります。(値が同じならOK)7 === "7"
はfalse
になります。(値とデータ型の両方が同じでないとダメ)===
を使った厳密な比較を行うことで、よりバグの少ない、意図した通りのプログラムを書くことができます。そのためにも、型を揃えることが重要になります。
4. 型を変換する「キャスト」
変数のデータ型を意図的に変換することを**「型キャスト(Type Casting)」**と呼びます。PHPでは、変換したい型の名前を()
で囲んで変数の前に置くだけで、簡単に型変換ができます。
(int)
を使って文字列を整数に変換する例:
<?php
// URLから受け取ったIDは、この時点では文字列
$id_from_get = $_GET['id']; // 例: "7"
var_dump($id_from_get); // 出力: string(1) "7"
// (int) を使って整数型にキャストする
$id_as_int = (int)$id_from_get;
var_dump($id_as_int); // 出力: int(7)
?>
var_dump()
の結果がstring
からint
に変わっているのが分かります。これで、この$id_as_int
変数は安心してデータベースのINT
型カラムに対応させることができます。
実装例:バリデーションとキャストを組み合わせる
前回のバリデーション(入力値チェック)と今回のキャストを組み合わせることで、より安全で堅牢なコードが完成します。
<?php
// 1. IDが存在し、かつ半角数字の文字列であるかをチェック(バリデーション)
if (isset($_GET['id']) && ctype_digit($_GET['id'])) {
// 2. チェックを通過した安全な値を、整数型に変換(キャスト)
$id = (int)$_GET['id'];
echo "処理対象のIDは整数型の " . $id . " です。";
// この$idを使って、データベースへの問い合わせなど、次の処理に進む
} else {
echo "不正なIDが指定されました。";
exit();
}
?>
まとめ
- PHPのデータには型(
string
,int
など)がある。 var_dump()
を使うと、変数の型と値を詳しく確認できる。- URLパラメータ (
$_GET
) で受け取る値は、数字でも文字列 (string
) 型になる。 (int)
などのキャストを使うことで、データ型を意図的に変換できる。
PHPの柔軟性に頼るだけでなく、このようにデータ型を意識し、適切にバリデーションとキャストを行うことが、バグが少なく、安全でメンテナンスしやすいプログラムを書くための重要なスキルです。