2008年2月3日日曜日

PHPでいろいろな型の変数を文字列に変換する5つの関数の比較

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 =>
print_r()と似ているが、arrayとobjectを変換できない。
暗黙の変換で文字列にした場合はこのパターンになる。


(おまけ)
gettype()
  • boolean(true) => boolean
  • boolean(false) => boolean
  • integer => integer
  • double => double
  • string => string
  • array => array
  • object => object
  • resource => resource
  • null => NULL
nullだけなぜか大文字。

0 件のコメント:

コメントを投稿