我们在测试时,需要知道是否得到正确的数据,比如打印一个对象时,看看这个对象有哪些属性和值,如果再类中定义了__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; //我的名字是:大笑哈哈
通过以上两种代码来总结一下:
- 不使用__toString()方法,echo对象体会报语法错误。
- 使用__toString()方法,可以echo 对象体。并自定义要输出的样式,及属性。
- _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方法通过自定义数组来返回需要打印的属性和值,如果不使用该魔术方法,则默认返回所有的属性和值。
总结:
在测试时,可以使用echo
、var_dump()
、print_r()
来查看对象的属性和值,** 不能直接echo ,需要在类中添加__toString()方法才能使用echo
,否则会报语法错误 **。也可以使用__debugInfo()方法来指定需要返回的属性和值。__toString()
、__debugInfo()
可以自定义样式,也可以返回指定的属性和值。