型の分類と型変換
目次
- 解説
- 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型となっています。このように、型を宣言することでキャストをせずとも値を特定の型に強制することができ、型の保証された安全なコードになります。