深入讨论PHP5对象复制技术(5)
来源:未知 责任编辑:责任编辑 发表时间:2014-01-25 11:34 点击:次
我们生产了一台电视机tv1 , 并且设置它的编号为111111,然后我们用clone将tv1复制得到了tv2,这个时候__clone魔术方法被触发,此方法将直接作用与复制得到的对象tv2,我们在__clone方法中调用了setIdentity成员方法将tv2的_identity属性清空,以便我们后面对它进行重新编号。由此我们可以看到__clone魔术方法能让我们非常方便的在clone对象的时候做一些附加的操作。
clone操作的致命缺陷
clone真的能够达到理想的复制效果吗?在某些情况下,你应该会发现,clone操作并没有我们想象中的那么完美。我们将以上的电视机类修改一下,然后做测试。
每台电视机都会附带一个遥控器,所以我们将会有一个遥控器类,遥控器和电视机是一种“聚合”关系(相对与“组合”关系,是一种较弱的依赖关系,因为一般情况电视机就算没有遥控也能正常使用),现在我们的电视机对象应该都持有一个到遥控器对象的引用。下面看看代码
PHP代码
- /**
- * 电视机类
- */
- class Television
- {
- /**
- * 电视机编号
- */
- protected $_identity = 0;
- /**
- * 屏幕高度
- */
- protected $_screenLength = 300;
- /**
- * 屏幕宽度
- */
- protected $_screenHight = 200;
- /**
- * 电视机外观颜色
- */
- protected $_color = 'black';
- /**
- * 遥控器对象
- */
- protected $_control = null;
相关新闻>>
- 发表评论
-
- 最新评论 更多>>