PHPのデータ型と型変換!var_dump()とキャストで安全なコードを書こう

PHPは非常に柔軟な言語で、多くの場合、データが数値か文字列かを自動で判断して処理してくれます。しかし、データベースのように厳密なデータ型を要求するシステムと連携する際には、この柔軟性が予期せぬエラーの原因になることがあります。

特に、URL経由で受け取る$_GETの値は、たとえ数字であっても、PHP上では「文字列」として扱われます。

この記事では、PHPの「データ型」の基本、変数の型を正確に調べる方法、そして意図した型に変換する「キャスト」というテクニックについて解説します。


目次

1. PHPの基本的なデータ型を理解する

まず、PHPには以下のような基本的なデータの種類(データ型)があることを理解しましょう。

  • string (文字列): “こんにちは” や “abc” といった文字のデータ。
  • int (整数 / integer): 10-123 といった小数点のない数値。
  • array (配列): 複数の値をまとめて格納するデータ。
  • bool (論理値 / boolean): true (真) または false (偽) のどちらかを表すデータ。

PHPは、変数に値が代入される際に自動でデータ型を判断してくれる「弱い(ルーズな)型付け言語」ですが、プログラマが型を意識することは、バグの少ない安全なコードを書く上で非常に重要です。


2. 変数の型と値を詳しく調べるvar_dump()

echoprint_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」にわざわざ変換する必要があるのでしょうか。

  1. データベースとの連携: データベースのテーブル設計では、カラムごとにINT(整数型)やVARCHAR(文字列型)といった厳密なデータ型が決められています。idカラムがINT型で定義されている場合、そこに文字列の"7"を渡すのではなく、整数の7を渡すのが正しい作法です。これにより、意図しない動作やエラーを防ぎます。
  2. 厳密な比較: 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の柔軟性に頼るだけでなく、このようにデータ型を意識し、適切にバリデーションとキャストを行うことが、バグが少なく、安全でメンテナンスしやすいプログラムを書くための重要なスキルです。

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

私が勉強したこと、実践したこと、してることを書いているブログです。
主に資産運用について書いていたのですが、
最近はプログラミングに興味があるので、今はそればっかりです。

目次