最終更新日:
公開日:
レシピ
変数
変数にセットされた値の型を強制変換する
変数に入っている値に対し、特定の型へ変換する方法について2通り解説します。
この記事のポイント
- 変数に入っている値の型を変換する
- 値の型をコントロールすることでエラーを防ぐ
目次
値の型を特定の型に強制変換する
変数に入っている値の型を明示的に決めることができると、処理の分岐や意図しない型の値によるエラーを未然に防くことができるようになります。
今回は下記2つの方法で変数の値を指定した型に変換する方法について紹介していきます。
- 型キャストを使う方法
- settype関数を使う方法
それぞれの方法をコードを使いながら解説していきます。
型キャストを使う方法
変数の値の型を変換する1つ目の方法は「型キャスト」です。
関数を使うよりも手軽なため、多くの場合はこちらがオススメ。
例えば「整数」へ変換して処理したい場合、次のように変数の前にキャストしたい型を指定します。
変数の値を「整数」へ型キャストする例
(int)$a
同じように、次のような型キャストを使うことができます。
型キャスト | 変換後の型 |
---|---|
(int) | 値を整数型(int)にする |
(integer) | 値を整数型(int)にする |
(bool) | 値を論理型(boolean)にする |
(boolean) | 値を論理型(boolean)にする |
(float) | 値を浮動小数点数(float)にする |
(double) | 値を浮動小数点数(float)にする |
(real) | 値を浮動小数点数(float)にする |
(string) | 値を文字列(string)にする |
(array) | 値を配列(array)にする |
(object) | 値をオブジェクト(object)にする |
型キャストを活用する例を、「キャストしない場合」と「キャストした場合」に分けて紹介します。
型キャストしない場合
<?php
$a = "1";
if( $a === 1 ) {
echo "OK"; // 出力されない
}
上記のコードは変数の値が「文字列」のため、比較演算子「===」を使った場合は型が異ります。
その結果、条件式はfalseになり何も出力されません。
型キャストした場合
<?php
$a = "1";
if( (int)$a === 1 ) {
echo "OK"; // 「OK」と出力される
}
上記のコードは「(int)」とキャストをつけているため、変数の値が「整数」として比較を行うのでtrueとなりメッセージが出力されます。
なお、型キャストによる型変換は一時的なものです。
もし変換した後の型を保持したい場合は、変数にセットし直す必要があります。
コード例
$a = (int)$a;
settype関数を使う方法
続いて、settype関数を使った型変換の方法を解説します。
settype関数の基本的な使い方
settype( $a, $type);
$aには型変換したい値のセットされた変数を指定し、$typeには変換後の「型」を指定します。
$typeに指定できる型は次のいずれかになります。
返り値は変換に成功するとtrue、失敗したらfalseが返されます。
指定する型の文字列 | 内容 |
---|---|
bool | 型を「論理値」へキャスト |
boolean | 型を「論理値」へキャスト |
int | 型を「整数型」へキャスト |
integer | 型を「整数型」へキャスト |
float | 浮動小数点数(float)へキャス |
double | 浮動小数点数(float)へキャスト |
string | 型を文字列へキャスト |
array | 型を配列へキャスト |
object | 型をオブジェクトへキャスト |
null | 型をnullへキャスト |
コード例
<?php
$a = "1";
var_dump($a); // string '1'
// 型を変換
settype($a, 'int');
var_dump($a); // int 1
関数が実行された時点で、変数には自動的に変換後の値がセットされます。
型キャストとは違い、一時的な変換ではないことに注意してください。
例えば、次の2つのコードは同じことをしています。
コード例
$a = (int)$a;
// 上記と同じことをしている
settype( $a, 'int');
条件式などで一時的に型変換したい場合は「型キャスト」を使い、変換した後の型を保持したい場合はsettype関数を使ってください。
こちらの記事は役に立ちましたか?
コメントありがとうございます!
運営の参考にさせていただきます。
ありがとうございます。
もしよろしければ、あわせてフィードバックや要望などをご入力ください。