デバッグし易くしよう! 4: 変数、配列の中身確認 var_dump関数等
プログラムの処理が進んでいる中で、必要な値が正しく変数、配列にセットできているかどうかは大切なことです。これもデバッグ処理時は表示するなり何なりして確認したいものです。
Step4 変数、配列の中身を確認
恐らく、これは良く紹介されている関数だと思いますが、変数に関する情報をダンプする関数 var_dump関数(マニュアル)を利用します。これを利用すると引数として指定した変数の値をデータの型と値を返してくれます。配列にも利用することが可能です。
例を見ていただく方が良いと思いますが、下の例のように文字列、数字(INT,float)、bool値を代入した変数と、配列をvar_dump関数を使って表示させると
<?php $hensu1="文字をいれました"; $hensu2=125; $hensu3=123456789012345; $hensu4=FALSE; $arr1=array("たま"=>array("syurui"=>"猫","age"=>1,"かわいいよ"), "ぽち"=>array("syurui"=>"犬","age"=>3,"食いしん坊だよ") ); var_dump($hensu1); var_dump($hensu2); var_dump($hensu3); var_dump($hensu4); var_dump($arr1); ?>
以下のようにデータ型(桁数)値 の形で処理結果が表示ます。
string(24) "文字をいれました" int(125) float(1.2345678901234E+14) bool(false) array(2) { ["たま"]=> array(3) { ["syurui"]=> string(3) "猫" ["age"]=> int(1) [0]=> string(15) "かわいいよ" } ["ぽち"]=> array(3) { ["syurui"]=> string(3) "犬" ["age"]=> int(3) [0]=> string(21) "食いしん坊だよ" } }
変数の値だけを取得したい場合には、var_export関数(マニュアル)があります。先ほどのコードの後半をvar_exportで下のように書き変えて実行すると
<?php $hensu1="文字をいれました"; $hensu2=125; $hensu3=123456789012345; $hensu4=FALSE; $arr1=array("たま"=>array("syurui"=>"猫","age"=>1,"かわいいよ"), "ぽち"=>array("syurui"=>"犬","age"=>3,"食いしん坊だよ") ); var_export($hensu1); var_export($hensu2); var_export($hensu3); var_export($hensu4); var_export($arr1); ?>
次のように、データ型などの情報は含まず、変数、配列の値だけが戻されます。
'文字をいれました'1251.2345678901234E+14falsearray ( 'たま' => array ( 'syurui' => '猫', 'age' => 1, 0 => 'かわいいよ', ), 'ぽち' => array ( 'syurui' => '犬', 'age' => 3, 0 => '食いしん坊だよ', ), )
試しに以前から利用しているサンプルコードで、var_dumpを利用してみると
<?php //(略) $ret= tweet_fop($message, $username, $password); var_dump($ret); //http://twitter.com/statuses/update.json から戻された文字列 $ret_buf=json_decode($ret,true); var_dump($ret_buf);//json_decodeした後の配列 //(略) ?>
それぞれデータ形式と、値の形で表示することができます。
Twitterより戻された文字列
string(1127) "{"favorited":false,"in_reply_to_user_id":null,"in_reply_to_status_id":null,"in_reply_to_screen_name":null,"source":"API","geo":n (以下略)
json形式だったものを配列に変換した結果
array(11) { ["favorited"]=> bool(false) ["in_reply_to_user_id"]=> NULL ["in_reply_to_status_id"]=> NULL ["in_reply_to_screen_name"]=> NULL ["source"]=> string(60) "API" ["geo"]=> NULL ["user"]=> array(26) { ["description"]=> string(0) "" ["profile_text_color"]=> string(6) "000000" ["profile_image_url"]=> string(67) "http://s.twimg.com/a/ -中略- xxx.png" ["statuses_count"]=> int(1980) ["profile_background_image_url"]=> string(59) "http://s.twimg.com/a/ -中略- /bg.png" ["profile_link_color"]=> string(6) "0000ff" ["screen_name"]=> string(15) "***************" (以下略)