debugなどで変数の中身を見たい時などにvar_dump()したりするけど、そんな変数を文字列に変換する関数たちによる変数型による違いを比較してみた。
(凡例:型 => 文字列に変換した値の例)
print_r()
- boolean(true) => 1
- boolean(false) =>
- integer => 123
- double => 0.5
- string => abc
- array => Array ( [0] => 1 [1] => 2 [2] => 3 )
- object => Example Object ( [public_var] => 123 [_private_var:private] => 456 )
- resource => Resource id #3
- null =>
trueが1になる。
falseやnullの場合、何も出力されない。
var_dump()
- boolean(true) => bool(true)
- boolean(false) => bool(false)
- integer => int(123)
- double => float(0.5)
- string => string(3) "abc"
- array => array(3) { [0]=> int(1) [1]=> int(2) [2]=> int(3) }
- object => object(Example)#1 (2) { ["public_var"]=> int(123) ["_private_var:private"]=> int(456) }
- resource => resource(3) of type (stream)
- null => NULL
そのまま出力されてしまうので、内容を取得して使いたかったら出力制御関数を組み合わせて使う。
var_export()
- boolean(true) => true
- boolean(false) => false
- integer => 123
- double => 0.5
- string => 'abc'
- array => array ( 0 => 1, 1 => 2, 2 => 3, )
- object => Example::__set_state(array( 'public_var' => 123, '_private_var' => 456, ))
- resource => NULL
- null => NULL
print_r()と違い、booleanやnullの変換もできるし、stringにクォーテーションが付くのがよい。
resourceがなぜかnullになる。
serialize()
- boolean(true) => b:1;
- boolean(false) => b:0;
- integer => i:123;
- double => d:0.5;
- string => s:3:"abc";
- array => a:3:{i:0;i:1;i:1;i:2;i:2;i:3;}
- object => O:7:"Example":2:{s:10:"public_var";i:123;s:21:"�Example�_private_var";i:456;}
- resource => i:0;
- null => N;
strval()
- boolean(true) => 1
- boolean(false) =>
- integer => 123
- double => 0.5
- string => abc
- array => Array
- object => ※FatalErrorが発生する
- resource => Resource id #3
- null =>
暗黙の変換で文字列にした場合はこのパターンになる。
(おまけ)
gettype()
- boolean(true) => boolean
- boolean(false) => boolean
- integer => integer
- double => double
- string => string
- array => array
- object => object
- resource => resource
- null => NULL
0 件のコメント:
コメントを投稿