基礎

PHPの型入門|データ型の種類と型変換をわかりやすく解説

PHPでプログラミングを始めると、まず理解しておくべき重要な概念が「型(データ型)」です。型とは、変数に格納されるデータの種類を表すもので、整数・小数・文字列・真偽値などさまざまな種類があります。

PHPは「動的型付け言語」と呼ばれ、変数の型を明示的に宣言する必要がありません。しかし、内部的にはすべてのデータに型が割り当てられており、型を理解していないと思わぬバグの原因になります。この記事では、PHPの主要なデータ型と型変換について詳しく解説します。

PHPの主要なデータ型

PHPには以下の主要なデータ型があります。それぞれの特徴を見ていきましょう。

PHP
<?php
// 整数型 (int / integer)
$age = 25;
$negative = -10;
$hex = 0xFF;    // 16進数(255)
$octal = 0755;  // 8進数(493)
$binary = 0b1010; // 2進数(10)

// 浮動小数点型 (float / double)
$price = 19.99;
$scientific = 1.2e3; // 1200.0

// 文字列型 (string)
$name = "太郎";
$greeting = 'こんにちは';

// 真偽型 (bool / boolean)
$isActive = true;
$isDeleted = false;

// 配列型 (array)
$fruits = ["りんご", "みかん", "バナナ"];

// null型
$empty = null;

// それぞれの型を確認
echo gettype($age) . "\n";
echo gettype($price) . "\n";
echo gettype($name) . "\n";
echo gettype($isActive) . "\n";
echo gettype($fruits) . "\n";
echo gettype($empty) . "\n";
?>
実行結果
integer
double
string
boolean
array
NULL

整数型(int)は小数点を含まない数値で、10進数だけでなく16進数・8進数・2進数でも表記できます。浮動小数点型(float)は小数点を含む数値で、科学的記法(1.2e3のような形式)にも対応しています。

文字列型(string)はダブルクォート(")またはシングルクォート(')で囲みます。ダブルクォートの中では変数が展開されますが、シングルクォートの中では展開されない点に注意しましょう。

型の確認方法

変数の型を確認するにはいくつかの方法があります。デバッグ時に非常に役立つので覚えておきましょう。

PHP
<?php
$value = 42;

// gettype() - 型名を文字列で返す
echo gettype($value) . "\n";

// var_dump() - 型と値を詳細に表示
var_dump($value);

// is_xxx() 系関数 - 特定の型かどうかを判定
var_dump(is_int($value));
var_dump(is_string($value));
var_dump(is_float($value));
var_dump(is_bool($value));
var_dump(is_null($value));
var_dump(is_array($value));
?>
実行結果
integer
int(42)
bool(true)
bool(false)
bool(false)
bool(false)
bool(false)
bool(false)

var_dump()は型と値を同時に表示してくれるため、デバッグ時に最もよく使われる関数です。is_int()is_string()などの関数は、条件分岐で型をチェックしたいときに便利です。

型変換(キャスト)

PHPでは、変数の型を別の型に変換することができます。これを「型変換」または「キャスト」と呼びます。

PHP
<?php
// 明示的な型変換(キャスト)
$str = "123";
$num = (int) $str;
var_dump($num); // int(123)

$float = (float) "3.14";
var_dump($float); // float(3.14)

$bool = (bool) 1;
var_dump($bool); // bool(true)

$strFromInt = (string) 42;
var_dump($strFromInt); // string(2) "42"

// 暗黙的な型変換(自動変換)
$result = "10" + 5;
var_dump($result); // int(15)

$result2 = "3.5" * 2;
var_dump($result2); // float(7)

// 文字列と数値の結合
$text = "年齢: " . 25;
echo $text . "\n";
?>
実行結果
int(123)
float(3.14)
bool(true)
string(2) "42"
int(15)
float(7)
年齢: 25

PHPでは算術演算子(+、-、*、/)を使うとき、文字列が自動的に数値に変換されます。一方、文字列結合演算子(.)を使うと数値が文字列に変換されます。この暗黙的な型変換はPHPの特徴ですが、予期しない結果を招くこともあります。

暗黙の型変換に注意

"abc" + 10 のように数値に変換できない文字列を計算に使うと、文字列は 0 として扱われます。PHP 8.0以降ではこのような変換で警告が出るようになりました。意図しないバグを防ぐために、明示的な型変換を心がけましょう。

null型と真偽値の注意点

null型は「値が存在しない」ことを表す特殊な型です。変数が初期化されていない場合や、明示的にnullを代入した場合にnull型になります。

PHP
<?php
$var = null;
var_dump($var);          // NULL
var_dump(is_null($var)); // bool(true)

// falseと評価される値(falsy)
var_dump((bool) 0);      // bool(false)
var_dump((bool) 0.0);    // bool(false)
var_dump((bool) "");     // bool(false)
var_dump((bool) "0");    // bool(false)
var_dump((bool) []);     // bool(false)
var_dump((bool) null);   // bool(false)

// trueと評価される値(truthy)
var_dump((bool) 1);      // bool(true)
var_dump((bool) -1);     // bool(true)
var_dump((bool) "hello");// bool(true)
var_dump((bool) [1, 2]); // bool(true)
?>

PHPでは、0、0.0、空文字列""、文字列"0"、空配列[]、nullがfalseと評価されます。特に文字列"0"がfalseになる点はPHP独特の仕様で、他の言語から来た方が間違えやすいポイントです。

厳密な比較を使おう

== 演算子は型変換を行ってから比較しますが、=== 演算子は型も含めて比較します。例えば 0 == false は true ですが、0 === false は false です。バグを防ぐために === を使う習慣をつけましょう。

まとめ

  • PHPの主要な型には整数型(int)、浮動小数点型(float)、文字列型(string)、真偽型(bool)、配列型(array)、null型がある
  • gettype()やvar_dump()で型を確認でき、is_int()などの関数で型を判定できる
  • (int)、(float)などのキャスト演算子で明示的に型変換できる
  • PHPは暗黙的な型変換を行うため、意図しない結果に注意が必要
  • 文字列"0"や空配列がfalseになるなど、PHP独特の型変換ルールを理解しておくことが重要