デバッグ


変数の中身を出力する(var_dump)

var_dump()を使用します。変数を持ち合うと循環してしまい無限ループしてしまうので注意が必要です。

class class1{
    public $val;
    public $var2;
    public $ary;
    public $str;
}

$cls = new class1();
$cls->val = 10;
$cls->var2 = 22.1;
$cls->ary = array('apple' => 1, 5);
$cls->str = 'orange';
var_dump($cls);

// object(class1)#1 (4) {
//   ["val"]=>
//   int(10)
//   ["var2"]=>
//   float(22.1)
//   ["ary"]=>
//   array(2) {
//     ["apple"]=>
//     int(1)
//     [0]=>
//     int(5)
//   }
//   ["str"]=>
//   string(6) "orange"
// }

変数の中身を文字列取り出す(var_export)

var_export()を使用します。第二引数をtrueにすることで取り出せます。falseだと出力されます。

class class2{
    public $val;
    public $var2;
    public $ary;
    public $str;
}

$cls = new class2();
$cls->val = 10;
$cls->var2 = 22.1;
$cls->ary = array('apple' => 1, 5);
$cls->str = 'orange';
$ret = var_export($cls, true);
echo "$ret\n";

// class2::__set_state(array(
//    'val' => 10,
//    'var2' => 22.1,
//    'ary' =>
//   array (
//     'apple' => 1,
//     0 => 5,
//   ),
//    'str' => 'orange',
// ))

コールスタックを出力する(debug_backtrace)

debug_backtrace()を呼び出します。引数をfalseにするとobjectについての出力がなくなります。
version 5.4以降では第2引数に出力するスタックの数を設定できるようになります。

class class3{
    public function func1($arg1){
        var_dump(debug_backtrace());
    }
    public function func2($arg1, $arg2){
        $arg = 3;
        $this->func1($arg);
    }
}    

$cls = new class3();
$cls->func2(1, 2);

// =>
// array(2) {
//   [0]=>
//   array(7) {
//     ["file"]=>
//     string(28) ファイルへのパス
//     ["line"]=>
//     int(93)
//     ["function"]=>
//     string(5) "func1"
//     ["class"]=>
//     string(6) "class3"
//     ["object"]=>
//     object(class3)#1 (0) {
//     }
//     ["type"]=>
//     string(2) "->"
//     ["args"]=>
//     array(1) {
//       [0]=>
//       &int(3)
//     }
//   }
//   [1]=>
//   array(7) {
//     ["file"]=>
//     string(28) ファイルへのパス
//     ["line"]=>
//     int(98)
//     ["function"]=>
//     string(5) "func2"
//     ["class"]=>
//     string(6) "class3"
//     ["object"]=>
//     object(class3)#1 (0) {
//     }
//     ["type"]=>
//     string(2) "->"
//     ["args"]=>
//     array(2) {
//       [0]=>
//       &int(1)
//       [1]=>
//       &int(2)
//     }
//   }
// }