1. 概要
前ページに続いて、変数の出力。
2. var_dump ダンプ
詳細は、「PHP: var_dump」をご参照ください。
参考ページには、下記のように記述されています。
この関数は、指定した式に関してその型や値を含む構造化された情報を 返します。配列の場合、その構造を表示するために各値について再帰的に 探索されます。
var_dump(mixed $value, mixed ...$values): void
というコードを書いてブラウザで表示すると(改行は「<pre>」で・・・)、下記のような表示が得られます。
array(47) {
["REDIRECT_HTTPS"]=>
string(2) "on"
["REDIRECT_SSL_TLS_SNI"]=>
string(18) "freebsd.sing.ne.jp"
["REDIRECT_STATUS"]=>
string(3) "200"
・・・ 略 ・・・
["REQUEST_TIME"]=>
int(1666139840)
}
配列の個数がわかるところはよいですが、それ以外は、前項の「print_r」の方が、視覚的になじみやすいかと思われます。
「var_dump()」は、出力先が標準出力になっているため、「Laravel」では、少々使いにくい。
これを変更するには、「ob_*()」という関数を使用して、出力先を変更してやります。
すなわち、「$data」という変数を出力したいものとして。
ob_start();
var_dump($data);
$text=ob_get_contents();
ob_end_clean();
Log::debug(__LINE__.' $data['.$text.']'.PHP_EOL);
と書けば、「Laravel」のログへ出力されます。
3. var_export ダンプ
「var_export()」は、「var_dump()」に似ていますが、公式のドキュメントによれば、「の関数は var_dump() に似ていますが、 返される表現が有効な PHP コードであるところが異なります。」となっています。
var_export(mixed $value, bool $return = false): ?string
下記のコードを書いて。
<?php
$array = Array("は", "ひ", "ふ");
var_dump($array);
var_export($array);
実行すると、下記の結果が得られます。
array(3) {
[0]=>
string(3) "は"
[1]=>
string(3) "ひ"
[2]=>
string(3) "ふ"
}
array (
0 => 'は',
1 => 'ひ',
2 => 'ふ',
)
なるほど、「var_dump()」より「var_export()」の出力の方が、洗練された感じがします。
場面によって、使い分けるのがよいかと思います。
4. 単体だと改行されない
前項までの例は、出力する変数が「array」でして。
「array」だと、改行をうまいこと入れてくれますが、単体の変数の場合は、改行されません。
例えば、下記のコードを書いて。
<?php
$status1 = true;
$status2 = false;
print("\$status1[$status1]\n");
print("\$status2[$status2]\n");
var_dump( $status1 );
var_dump( $status2 );
var_export( $status1 );
var_export( $status2 );
実行すると、下記のような表示になります。
$status1[1]
$status2[]
bool(true)
bool(false)
truefalse
末尾がいただけませんな。
この場合は、自分で改行を入れてやる必要があります。
例えば、下記のように。
print("\$status1[". var_export($status1, true). "]\n");
print("\$status2[". var_export($status2, true). "]\n");
こうすれば、下記のように表示されます。
$status1[1]
$status2[]
bool(true)
bool(false)
$status1[true]
$status2[false]
5. 参考サイト
本ページは、下記のサイトを参考にさせていただきました。
「PHP: 変数操作 関数」
「【PHP】Laravelのデバッグ・変数の確認方法(var_export, dump, dd関数) #PHP」
「PHP Bool 値を文字列として出力したい」