__clone
我们看过一个使用clone关键字的例子,在我的介绍从入门到oop的第二部分,创建对象的副本,而不是有两个变量指向同一个实际的数据。在一个类中重写此方法,我们可以观察发生了什么当在对象上使用clone关键字时,。虽然这是不是我们每一天能遇到的,一个漂亮的用例是创建一个真正的单例模式通过添加private访问修饰符给这个方法。
__toString
无疑把最好的始终留到最后,__toString方法是一个非常方便的附加方法对于我们的工具包。该方法可以声明覆盖对象的行为,当作为一个字符串输出时,例如,当它被输出时。如果你想能输出对象到模板中,你可以使用此方法来控制输出结果。让我们再来看看在Penguin类中:
class Penguin {
public function __construct($name) {
$this->species = 'Penguin';
$this->name = $name;
}
public function __toString() {
return $this->name . " (" . $this->species . ")\n";
}
}
public function __construct($name) {
$this->species = 'Penguin';
$this->name = $name;
}
public function __toString() {
return $this->name . " (" . $this->species . ")\n";
}
}
在适当的位置,输出该对象通过调用echo输出它,如:
$tux = new Penguin('tux');
echo $tux;
echo $tux;
我不常常使用这种捷径,但是知道它的存在是很有用的。
更多魔术方法
更多参考 http://php.net 列出的所有的魔术方法(是的,不仅仅是文中所列出的,我仅仅选出那些我认为最好开始学习的。)如果你想了解其他魔术方法,请仔细查看。