2013年05月04日

4種類のスカラー型

PHP: 導入 - Manual

PHP のマニュアルの「導入」部分で、PHP で使用されるデータ型について書かれています。その中で実際の中心となるのは、「スカラー型」と呼ばれる「量」をあらわす数値型ですが、文字列もその中に含まれます。

スカラー [scalar]

大きさだけで表せる量。
時間温度密度等。
4 種類のスカラー型  ■ 論理値 (boolean)  ■ 整数 (integer)  ■ float (浮動小数点数, double も同じ)  ■ 文字列 (string) スクリプト言語では、データ型を明示して変数を作成するという事をしません。与えられた実際の値によって自動的に変数内部が変換されていきます。また、意図的にその型へと変換したい場合は、C言語と同じキャストか関数で行います。 ※ マニュアルにある float 型の補足説明
マニュアル内のいくつかの場所で "double" 型という記述が残っているかもしれません。 

double は float と同じものだと考えてください。2 種類の名前が存在するのは、 歴史的な理由によるものです。 
通常は PHP にまかせる 例えば、boolean 型に関して以下のような説明があります。
boolean に明示的に変換を行うには、キャスト (bool) または (boolean) を使用します。

しかし、演算子、関数、制御構造が boolean 型の引数を必要とする場合には、値は自動的に変換されるため、 多くの場合はキャストは不要です。 
これは、以下のような値が FALSE として PHP の実行が行われる事で納得する事ができます。  ■ integer の 0 (ゼロ)  ■ float の 0.0 (ゼロ)  ■ 空の文字列、 および文字列の "0" ※ PHP: gettype - Manual
<?
header( "Content-Type: text/html; Charset=shift_jis" );
header( "pragma: no-cache" );
header( "Expires: Wed, 31 May 2000 14:59:58 GMT" );
header( "Cache-control: no-cache" );

$a = (int)0;

if ( $a == FALSE ) {
	print "整数<br>";
	print gettype($a) . "<hr>";
}

$a = (float)0;

if ( $a == FALSE ) {
	print "浮動小数点数<br>";
	print gettype($a) . "<hr>";
}

$a = "0";

if ( $a == FALSE ) {
	print "文字列<br>";
	print gettype($a) . "<hr>";
}

$a = "";

if ( $a == FALSE ) {
	print "空文字列<br>";
	print gettype($a) . "<hr>";
}

$a = NULL;

if ( $a == FALSE ) {
	print "NULL<br>";
	print gettype($a) . "<hr>";
}

?>

整数
integer
浮動小数点数
double
文字列
string
空文字列
string
NULL
NULL
但し、=== 演算子を使用するとその限りではありません
<?
header( "Content-Type: text/html; Charset=shift_jis" );
header( "pragma: no-cache" );
header( "Expires: Wed, 31 May 2000 14:59:58 GMT" );
header( "Cache-control: no-cache" );

$a = false;

if ( $a === FALSE ) {
	print "真偽値<br>";
	print gettype($a) . "<hr>";
}

$a = (int)0;

if ( $a === FALSE ) {
	print "整数<br>";
	print gettype($a) . "<hr>";
}

$a = (float)0;

if ( $a === FALSE ) {
	print "浮動小数点数<br>";
	print gettype($a) . "<hr>";
}

$a = "0";

if ( $a === FALSE ) {
	print "文字列<br>";
	print gettype($a) . "<hr>";
}

$a = "";

if ( $a === FALSE ) {
	print "空文字列<br>";
	print gettype($a) . "<hr>";
}

$a = NULL;

if ( $a === FALSE ) {
	print "NULL<br>";
	print gettype($a) . "<hr>";
}

?>


if ( (bool)$a === FALSE ) { と書くと一致します


更新履歴
2010-10-17 : 記事作成
2013-05-04 : フォントサイズ・改行調整



posted by at 2013-05-04 13:37 | 文法 | このブログの読者になる | 更新情報をチェックする