我们在测试时,需要知道是否得到正确的数据,比如打印一个对象时,看看这个对象有哪些属性和值,如果再类中定义了__toString()方法,就能在测试时echo这个对象体,对象就会自动调用它所属类定义的__tostring()方法,格式化输出这个对象所包含的数据。如果没有这个方法,那么echo一个对象将报语法错误。
没有__toString()方法的类,在测试时,echo这个对象体会报错:

class User
{
    public $name = '大笑哈哈';
}
$user = new User;
//会报语法错误
echo $user;// Recoverable fatal error: Object of class User could not be converted to string in D:\AppServ\www\js\php\tostring.php on line 14

__toString()

下面来声明一个有__toString()的User对象。

class User
{
    public $name = '大笑哈哈';
    public function __toString()
    {
        return "我的名字是:{$this->name}";
    }
}
$user = new User; 
echo $user;  //我的名字是:大笑哈哈

通过以上两种代码来总结一下:

  1. 不使用__toString()方法,echo对象体会报语法错误。
  2. 使用__toString()方法,可以echo 对象体。并自定义要输出的样式,及属性。
  3. _toString方法必须是return返回。

__debugInfo()

和__tostring()方法一样,由var_dump()、print_r()打印对象体的时候,控制对象体要输出的属性和值;
实例代码:

class User
{
    public $name = '大笑哈哈';
    public function __debugInfo()
    {
        //使用数组来返回需要打印的属性和值;
        return [];
    }
}
$user = new User;
var_dump($user); //User Object ( )

__debugInfo方法通过自定义数组来返回需要打印的属性和值,如果不使用该魔术方法,则默认返回所有的属性和值。

总结:
在测试时,可以使用echovar_dump()print_r()来查看对象的属性和值,** 不能直接echo ,需要在类中添加__toString()方法才能使用echo,否则会报语法错误 **。也可以使用__debugInfo()方法来指定需要返回的属性和值。__toString()__debugInfo()可以自定义样式,也可以返回指定的属性和值。