查看完整版本: PHP 5.0对象模型深度探索之对象复制

铁血霸主 2007-8-1 22:21

PHP 5.0对象模型深度探索之对象复制

             <p>PHP5中的<a href="http://www.phpchina.com/javascript:;" onClick="javascript:tagshow(event, '%B6%D4%CF%F3');" target="_self"><u><strong>对象</strong></u></a>模型通过引用来调用对象, 但有时你可能想建立一个对象的副本,并希望原来的对象的改变不影响到副本 . 为了这样的目的,<a class="bluekey" href="http://www.yesky.com/key/1525/161525.html" target="_blank"><u><font color="#ffffff">PHP</font></u></a>定义了一个特殊的<a href="http://www.phpchina.com/javascript:;" onClick="javascript:tagshow(event, '%B7%BD%B7%A8');" target="_self"><u><strong>方法</strong></u></a>,称为__<a class="bluekey" href="http://www.yesky.com/key/2990/167990.html" target="_blank"><u><font color="#ffffff">clone</font></u></a>. 像__construct和__destruct一样,前面有两个下划线。<br><br>  默认地,用__clone方法将建立一个与原对象拥有相同属性和方法的对象. 如果你想在克隆时改变默认的内容,你要在__clone中覆写(属性或方法)。<br><br>  克隆的方法可以没有参数,但它同时包含this和that指针(that指向被复制的对象)。如果你选择克隆自己,你要小心复制任何你要你的对象包含的信息,从that到this,如果你用__clone来复制,PHP不会执行任何隐性的复制,下面显示了一个用系列序数来自动化对象的例子:<br><br>class ObjectTracker //对象跟踪器 <br>{ <br> private static $nextSerial = 0; <br> private $id; <br> private $<a class="bluekey" href="http://www.yesky.com/key/99/160099.html" target="_blank"><u><font color="#ffffff">name</font></u></a>; <br><br> function __construct($name) //<a class="bluekey" href="http://www.yesky.com/key/4434/164434.html" target="_blank"><u><font color="#ffffff">构造</font></u></a>函数 <br> { <br>  $this-&gt;name = $name; <br>  $this-&gt;id = ++self::$nextSerial; <br> } <br><br> function __clone() //克隆 <br> { <br>  $this-&gt;name = "Clone of $this-&gt;name"; <br>  $this-&gt;id = ++self::$nextSerial; <br> } <br><br> function getId() //<a class="bluekey" href="http://www.yesky.com/key/2892/187892.html" target="_blank"><u><font color="#ffffff">获取</font></u></a>id属性的值 <br> { <br>  return($this-&gt;id); <br> } <br><br> function getName() //获取name属性的值 <br> { <br>  return($this-&gt;name); <br> } <br>} <br><br>$ot = new ObjectTracker("Zeev's Object"); <br>$ot2 = clone$ot; <br><br>//输出: 1 Zeev's Object <br>print($ot-&gt;getId() . " " . $ot-&gt;getName() . ""); <br><br>//输出: 2 Clone of Zeev's Object <br>print($ot2-&gt;getId() . " " . $ot2-&gt;getName() . ""); <br>?><div>
页: [1]
查看完整版本: PHP 5.0对象模型深度探索之对象复制
PageRank