PHP: データ型
August 24, 2020
データの型について。PHP におけるプリミティブなデータ型は10種類ある。
スカラー型 #
boolean integer float string
複合型 #
array object callable iterable
特別な型 #
resource NULL
型情報を取得する - gettype() #
return values of gettype():
TRUE is <?php echo gettype(TRUE); ?>
1 is <?php echo gettype(1); ?>
1.0 is <?php echo gettype(1.0); ?>
"str" is <?php echo gettype("str"); ?>
array() is <?php echo gettype(array()); ?>
new class{} is <?php echo gettype(new class{}); ?>
fopen() is <?php echo gettype(fopen(__FILE__, "r")); ?>
NULL is <?php echo gettype(NULL); ?>
出力結果。
return values of gettype():
TRUE is boolean
1 is integer
1.0 is double
"str" is string
array() is array
new class{} is object
fopen() is resource
NULL is NULL
gettype() は callable と iterable は返さない(それらは object )
型を判別する - is_*() #
is_book() is_int() is_float() is_string() is_array() is_object() is_callable() is_iterable() is_resource() is_null()
無名関数は is_object() と is_callable() で TRUE になるのかな?試してみた。
<?php
$fn = function() {};
$it = array();
?>
is_object($fn) is <?php echo is_object($fn) ?>
is_callable($fn) is <?php echo is_callable($fn) ?>
is_array($it) is <?php echo is_array($it) ?>
is_iterable($it) is <?php echo is_iterable($it) ?>
出力結果。
is_object($fn) is 1
is_callable($fn) is 1
is_array($it) is 1
is_iterable($it) is 1
var_dump() で出力してみる #
var_dump() で型と値をまとめて確認できる。
<?php
var_dump(
TRUE,
1,
1.0,
"str",
array(),
new class() {},
fopen(__FILE__, "r"),
NULL,
);
bool(true)
int(1)
float(1)
string(3) "str"
array(0) {
}
object(class@anonymous)#1 (0) {
}
resource(5) of type (stream)
NULL
型キャスト #
PHP ではコンテキストによって暗黙的に型変換が行われる。明示的に型変換をする場合は (type) $val という記述で型キャストが行える。
<?php
var_dump(
(bool) 1,
(float) 1,
(double) 1,
(string) 1,
);
bool(true)
float(1)
float(1)
string(1) "1"
bool キャスト で false になる値 #
0,0.0""(空文字列)"0"array()(空配列)NULL
文字列の "0" が false になって、文字列の "false" は true になるのは罠っぽい。
<?php
var_dump(array(
"(bool) 0" => (bool) 0,
"(bool) 1" => (bool) 1,
"(bool) 0.0" => (bool) 0.0,
"(bool) 1.0" => (bool) 1.0,
"(bool) \"\"" => (bool) "",
"(bool) \"str\"" => (bool) "str",
"(bool) \"0\"" => (bool) "0",
"(bool) \"false\"" => (bool) "false",
"(bool) array()" => (bool) array(),
"(bool) array(1,2,3)" => (bool) array(1,2,3),
"(bool) NULL" => (bool) NULL,
));
array(11) {
["(bool) 0"]=>
bool(false)
["(bool) 1"]=>
bool(true)
["(bool) 0.0"]=>
bool(false)
["(bool) 1.0"]=>
bool(true)
["(bool) """]=>
bool(false)
["(bool) "str""]=>
bool(true)
["(bool) "0""]=>
bool(false)
["(bool) "false""]=>
bool(true)
["(bool) array()"]=>
bool(false)
["(bool) array(1,2,3)"]=>
bool(true)
["(bool) NULL"]=>
bool(false)
}