我们前面说过在类里面声明 __
开始的方法名的方法(PHP给我们提供的),都是在某一时刻不同情况下自动调用执行的方法,__toString()
方法也是一样自动被调用的,是在直接输出对象引用时自动调用的, 前面我们讲过对象引用是一个指针,比如 说:$p=new Person()
中,$p
就是一个引用,我们不能使用 echo
直接输出 $p
,这样会输出 Catchable fatal error: Object of class Person could not be converted to string
这样的错误,如果你在类里面定义了__toString()
方法,在直接输出对象引用的时候,就不会产生错误,而是自动调用了 __toString()
方法, 输出 __toString()
方法中返回的字符,所以 __toString()
方法一定要有个返回值(return 语句) 。
<?php
// Declare a simple class
class TestClass {
public $foo;
public function __construct($foo) {
$this->foo = $foo;
}
// 定义一个__toString方法,返加一个成员属性$foo
public function __toString() {
return $this->foo;
}
}
$class = new TestClass('Hello');
// 直接输出对象
echo $class;
上例输出:Hello
下一节:有的时候我们需要在一个项目里面,使用两个或多个一样的对象,如果你使用“new”关键字重新创建对象的话,再赋值上相同的属性,这样做比较烦琐而且也容易出错,所以要根据一个对象完全克隆出一个一模一样的对象,是非常有必要的,而且克隆以后,两个对象互不干扰。