PHP 速習チュートリアル

PHP 型キャスト

1. PHP型キャストとは

PHPの型キャスト(Type Casting)とは、ある値を別のデータ型(Data type)へ明示的に変換するプロセスのことです(例:フロート(Float)からイント(Integer)への変換など)。

これにより、開発者はバリアブル(Variable / 変数)のデータタイプを直接制御できるようになります。
キャストを行うには、変換したいバリアブルや値の前に、括弧で囲ったキャストタイプを記述します。

PHPで利用可能なキャスト演算子(Casting operators)は以下の通りです:

  • (string) - ストリング(String)型に変換
  • (int) - イント(Integer)型に変換
  • (float) - フロート(Float)型に変換
  • (bool) - ブーリアン(Boolean)型に変換
  • (array) - アレイ(Array)型に変換
  • (object) - オブジェクト(Object)型に変換
  • (unset) - 非推奨(Deprecated)。NULL型に変換

2. Stringへのキャスト

ストリング型にキャストするには、変換したい値の前に (string) を使用します。

2.1 使用例:Stringへの変換

自身のPHPサーバーでデータタイプを確認してみましょう:

$a = 5;       // 整数 (Integer)
$b = 5.34;    // 浮動小数点数 (Float)
$c = "hello"; // 文字列 (String)
$d = true;    // 論理値 (Boolean)
$e = NULL;    // ヌル (NULL)

$a = (string) $a;
$b = (string) $b;
$c = (string) $c;
$d = (string) $d;
$e = (string) $e;

// var_dump() を使用してデータタイプを検証
var_dump($a);
var_dump($b);
var_dump($c);
var_dump($d);
var_dump($e);

3. Integerへのキャスト

イント型にキャストするには、値の前に (int) を使用します。

3.1 使用例:Integerへの変換

$a = 5;       // 整数 (Integer)
$b = 5.34;    // 浮動小数点数 (Float)
$c = "25 km"; // 文字列 (String)
$d = "km 25"; // 文字列 (String)
$e = "hello"; // 文字列 (String)
$f = true;    // 論理値 (Boolean)
$g = NULL;    // ヌル (NULL)

$a = (int) $a;
$b = (int) $b;
$c = (int) $c;
$d = (int) $d;
$e = (int) $e;
$f = (int) $f;
$g = (int) $g;

4. Floatへのキャスト

フロート型にキャストするには、値の前に (float) を使用します。

4.1 使用例:Floatへの変換

$a = 5;       // 整数 (Integer)
$b = 5.34;    // 浮動小数点数 (Float)
$c = "25 km"; // 文字列 (String)
$d = "km 25"; // 文字列 (String)
$e = "hello"; // 文字列 (String)
$f = true;    // 論理値 (Boolean)
$g = NULL;    // ヌル (NULL)

$a = (float) $a;
$b = (float) $b;
$c = (float) $c;
$d = (float) $d;
$e = (float) $e;
$f = (float) $f;
$g = (float) $g;

5. Booleanへのキャスト

ブーリアン型にキャストするには、値の前に (bool) を使用します。

5.1 使用例:Booleanへの変換

$a = 5;       // 整数 (Integer)
$b = 5.34;    // 浮動小数点数 (Float)
$c = 0;       // 整数 (Integer)
$d = -1;      // 整数 (Integer)
$e = 0.1;     // 浮動小数点数 (Float)
$f = "hello"; // 文字列 (String)
$g = "";      // 文字列 (String)
$h = true;    // 論理値 (Boolean)
$i = NULL;    // ヌル (NULL)

$a = (bool) $a;
$b = (bool) $b;
$c = (bool) $c;
$d = (bool) $d;
$e = (bool) $e;
$f = (bool) $f;
$g = (bool) $g;
$h = (bool) $h;
$i = (bool) $i;

値が 0NULLfalse、または空(empty)の場合、(bool) はそれを false に変換し、それ以外は true に変換されます。-1 であっても true に変換される点に注意してください。

6. Arrayへのキャスト

アレイ型にキャストするには、値の前に (array) を使用します。

6.1 使用例:Arrayへの変換

$a = 5;       // 整数 (Integer)
$b = 5.34;    // 浮動小数点数 (Float)
$c = "hello"; // 文字列 (String)
$d = true;    // 論理値 (Boolean)
$e = NULL;    // ヌル (NULL)

$a = (array) $a;
$b = (array) $b;
$c = (array) $c;
$d = (array) $d;
$e = (array) $e;

アレイにキャストする場合、ほとんどのデータタイプは1つの要素を持つインデックス付きアレイ(Indexed array)に変換されます。
NULL 値は空のアレイオブジェクトに変換されます。

オブジェクトをキャストすると、プロパティ名がキーに、プロパティ値が値になる連想アレイ(Associative array)に変換されます。

6.2 オブジェクトをアレイに変換する例

class Car {
  public $color;
  public $model;
  public function __construct($color, $model) {
    $this->color = $color;
    $this->model = $model;
  }
  public function message() {
    return "私の車は " . $this->color . " の " . $this->model . " です!";
  }
}

$myCar = new Car("赤", "ボルボ");
$myCar = (array) $myCar;
var_dump($myCar);

7. Objectへのキャスト

オブジェクト型にキャストするには、値の前に (object) を使用します。

7.1 使用例:Objectへの変換

$a = 5;       // 整数 (Integer)
$b = 5.34;    // 浮動小数点数 (Float)
$c = "hello"; // 文字列 (String)
$d = true;    // 論理値 (Boolean)
$e = NULL;    // ヌル (NULL)

$a = (object) $a;
$b = (object) $b;
$c = (object) $c;
$d = (object) $d;
$e = (object) $e;

オブジェクトにキャストする場合、ほとんどのデータタイプは "scalar" という名前のプロパティを1つ持ち、対応する値を保持するオブジェクトに変換されます。
NULL 値は空のオブジェクトに変換されます。

インデックス付きアレイは、インデックス番号をプロパティ名とし、その値をプロパティ値とするオブジェクトに変換されます。
連想アレイは、キーをプロパティ名、値をプロパティ値とするオブジェクトに変換されます。

7.2 アレイをオブジェクトに変換する例

$a = array("ボルボ", "BMW", "トヨタ"); // インデックス付きアレイ
$b = array("Peter"=>"35", "Ben"=>"37", "Joe"=>"43"); // 連想アレイ

$a = (object) $a;
$b = (object) $b;

8. NULLへのキャスト

注意: (unset) ステートメントは PHP 7.2.0 で非推奨となり、PHP 8.0.0 で削除されました。

値を NULL にキャストするには、バリアブルに NULL を直接代入します。

8.1 使用例:NULLへの変換

$a = 5;       // 整数 (Integer)
$b = 5.34;    // 浮動小数点数 (Float)
$c = "hello"; // 文字列 (String)
$d = true;    // 論理値 (Boolean)
$e = NULL;    // ヌル (NULL)

$a = NULL;
$b = NULL;
$c = NULL;
$d = NULL;
$e = NULL;