型の分類と型変換

目次
  • 解説
  • 1. データ型
  • 2. データ型の変換
  • 3. 型宣言ができる箇所
進捗を変更する




解説

1. データ型


PHPはこれまで学習してきた4種類のスカラー型を含む、以下の8種類の型が存在します。

分類読み方/呼び方データ種類扱うデータ
論理値型boolブーリアン型・
論理値型・真偽値型
スカラー型正しい/真:true
正しくない/偽:false
整数型int イント型・整数型・
インテジャー型
スカラー型 -9223372036854775808
~ 9223372036854775807
( -2147483648 ~ 2147483647 )
浮動小数
点数型
float フロート型・
浮動小数点数型
スカラー型 ±1.8×10の308乗
(±3.4×10の38乗)
文字列型stringストリング型・文字列型スカラー型0 ~ 2,147,483,647 文字
※実際にはメモリーが
 先に限界を迎える
配列arrayアレイ・配列・配列変数複合型複数データ
オブジェクト型objectオブジェクト型複合型データと手続き(インスタンス)
リソース型resourceリソース型特殊型データベースやファイル(外部情報)
ヌル型nullヌル型特殊型NULL・null

スカラー型とは、数字や文字列といった一つの値を持つ型のことを指します。複合型は、スカラー型とは対照的に、複数の値、または処理を持つ型のことを指します。そして、特殊型は、その二つの分類に当てはまらない特別な型です。

2. データ型の変換


PHPは弱い型付け言語であり、変数を定義した際に型を指定する必要がありません。代入した値の型がその変数の型となります。そして別の型の値を再代入することができてしまいます。

    public static function practiceCast() 
    {
        $castValue = '文字列です';
        Logger::echo($castValue); // 文字列です(string型)
        $castValue = 1 + 1;
        Logger::echo($castValue); // 2(int型)
    }

また別の値を再代入するのではなく、値はそのままに型を強制的に変更する場合、値の前に「()」で囲った型名を指定することにより、型を変更(キャスト)することが可能です。

    public static function practiceCast()
    {
        $castValue = '1';
        Logger::echo(get_debug_type($castValue)); // string
        Logger::echo($castValue); // 文字列の「'1'」
        $castValue = (int)$castValue; // int型にキャスト
        Logger::echo(get_debug_type($castValue)); // int
        Logger::echo($castValue); // 数値の「1」
    }

しかし、PHPのキャストは以下のようにわかりやすいものもあれば…

    public static function practiceCast()
    {
        $castValue = 0.5 + 0.5; // float 1.0
        Logger::echo(get_debug_type((int)$castValue)); // int
        Logger::echo((int)$castValue); // 1
        Logger::echo(get_debug_type((string)$castValue)); // string
        Logger::echo((string)$castValue); // '1'
    }

以下のように直感的でないものもあります。

    public static function practiceCast()
    {
        $castValue = '0 です'; // string
        Logger::echo(get_debug_type((int)$castValue)); // int
        Logger::echo((int)$castValue); // 0
        Logger::echo(get_debug_type((bool)$castValue)); // bool
        Logger::echo((bool)$castValue); // 1
    }

キャストの仕様を完璧に理解して使用する場合以外、一つの変数には一つの型の値のみを入れるようにプログラムを作成するようにしましょう。

3. 型宣言ができる箇所


PHPでは、関数の引数や戻り値、クラスのプロパティ対して型を宣言することが可能です。

※引数や戻り値、プロパティの詳細は今後学習します。

<?php
include './utility/Logger.php';

Types::main();

class Types
{
    public static string $stringProperty; // 追加

    ~ 省略 ~

    // 以下追加
    public static function practiceTypeDeclaration()
    {
        $intValue = 100;
        Logger::echo(get_debug_type($intValue)); // int
        self::$stringProperty = $intValue;
        Logger::echo(get_debug_type(self::$stringProperty)); // string
    }

int型の値を代入したはずなのに、「stringProperty」の値はstring型となっています。このように、型を宣言することでキャストをせずとも値を特定の型に強制することができ、型の保証された安全なコードになります。