記事の内容
この記事では、print_r, var_dump, var_exportを使ったデバッグ方法を説明します。
PHPのバージョンは、7系です。
print_r
配列の中身を表示
<?php | |
$array_1 = [ | |
'Japan' => '日本', | |
'China' => '中国', | |
'America' => 'アメリカ', | |
'South East' => ['タイ', 'ベトナム', 'フィリピン'] | |
]; | |
print_r($array_1); | |
// Array | |
// ( | |
// [Japan] => 日本 | |
// [China] => 中国 | |
// [America] => アメリカ | |
// [South East] => Array | |
// ( | |
// [0] => タイ | |
// [1] => ベトナム | |
// [2] => フィリピン | |
// ) | |
// ) | |
# パラメータがTRUE の場合は、この関数はstringを返します | |
$string = print_r($array_1, true); | |
print_r($string); | |
// Array | |
// ( | |
// [Japan] => 日本 | |
// [China] => 中国 | |
// [America] => アメリカ | |
// [South East] => Array | |
// ( | |
// [0] => タイ | |
// [1] => ベトナム | |
// [2] => フィリピン | |
// ) | |
// ) |
配列の中身をファイルに書き出す
<?php | |
$array_1 = [ | |
'Japan' => '日本', | |
'China' => '中国', | |
'America' => 'アメリカ', | |
'South East' => ['タイ', 'ベトナム', 'フィリピン'] | |
]; | |
# パラメータがTRUE の場合は、この関数はstringを返します | |
$print_r_string = print_r($array_1, true); | |
$file = 'print_r.txt'; | |
file_put_contents($file, $print_r_string); |
var_dump
var_dumpも変数を出力しますが、print_rとは表示する形式が異なります。
また、「__debugInfo」を使うことで、オブジェクトの出力形式を変更することができます。
<?php | |
$array_1 = [ | |
'Japan' => '日本', | |
'China' => '中国', | |
'America' => 'アメリカ', | |
'South East' => ['タイ', 'ベトナム', 'フィリピン'] | |
]; | |
var_dump($array_1); | |
// array(4) { | |
// ["Japan"]=> | |
// string(6) "日本" | |
// ["China"]=> | |
// string(6) "中国" | |
// ["America"]=> | |
// string(12) "アメリカ" | |
// ["South East"]=> | |
// array(3) { | |
// [0]=> | |
// string(6) "タイ" | |
// [1]=> | |
// string(12) "ベトナム" | |
// [2]=> | |
// string(15) "フィリピン" | |
// } | |
// } | |
class Person { | |
public $name; | |
public $age; | |
public function __construct($name, $age) | |
{ | |
$this->name = $name; | |
$this->age = $age; | |
} | |
} | |
$taro = new Person('太郎', 30); | |
var_dump($taro); | |
// object(Person)#1 (2) { | |
// ["name"]=> | |
// string(6) "太郎" | |
// ["age"]=> | |
// int(30) | |
// } | |
# __debugInfoを使用すると、オブジェクトのvar_dumpの出力を変更することができます | |
class NewTypePerson { | |
public $name; | |
public $age; | |
public function __construct($name, $age) | |
{ | |
$this->name = $name; | |
$this->age = $age; | |
} | |
public function __debugInfo() | |
{ | |
return ['名前は' => $this->name . 'です', '年齢は' => $this->age * 2]; | |
} | |
} | |
$taro = new NewTypePerson('太郎', 30); | |
var_dump($taro); | |
// object(NewTypePerson)#2 (2) { | |
// ["名前は"]=> | |
// string(12) "太郎です" | |
// ["年齢は"]=> | |
// int(60) | |
// } |
var_export
var_exportも変数を出力しますが、print_rやvar_dumpとは表示する形式が異なります。
<?php | |
$array_1 = [ | |
'Japan' => '日本', | |
'China' => '中国', | |
'America' => 'アメリカ', | |
'South East' => ['タイ', 'ベトナム', 'フィリピン'] | |
]; | |
var_export($array_1); | |
// array ( | |
// 'Japan' => '日本', | |
// 'China' => '中国', | |
// 'America' => 'アメリカ', | |
// 'South East' => | |
// array ( | |
// 0 => 'タイ', | |
// 1 => 'ベトナム', | |
// 2 => 'フィリピン', | |
// ), | |
// ) | |
echo PHP_EOL; | |
# 第二引数にtrueを入れると文字列を返します。 | |
$result = var_export($array_1, true); | |
var_export($result); | |
// 'array ( | |
// \'Japan\' => \'日本\', | |
// \'China\' => \'中国\', | |
// \'America\' => \'アメリカ\', | |
// \'South East\' => | |
// array ( | |
// 0 => \'タイ\', | |
// 1 => \'ベトナム\', | |
// 2 => \'フィリピン\', | |
// ), | |
// )' |