__clone(),当工具复制实现时挪用
正在少数状况下,咱们其实不需求齐全复制一个工具来取得此中属性。但有一个状况下的确需求:假如你有一个 GTK 窗口工具,该工具持有窗口相干的资本。你可能会想复制一个新的窗口,放弃一切属性与原来的窗口相反,但必需是一个新的工具(由于假如没有是新的工具,那末一个窗口中的扭转就会影响到另外一个窗口)。
另有一种状况:假如工具 A 中保留着工具 B 的援用,当你复制工具 A 时,你想此中应用的工具再也不是工具 B 而是 B 的一个正本,那末你必需失去工具 A 的一个正本。
作用:
工具复制能够经过 clone 要害字来实现(假如可能,这将挪用工具的 __clone() 办法)。工具中的 __clone() 办法不克不及被间接挪用。
语法:
$copy_of_object = clone $object;
留意:
当工具被复制后,PHP 5 会对工具的一切属性执行一个浅复制(shallow copy)。一切的援用属性 依然会是一个指向原来的变量的援用。
当复制实现时,假如界说了 __clone() 办法,则新创立的工具(复制天生的工具)中的 __clone() 办法会被挪用,可用于修正属性的值(假如有须要的话)。
看代码:
<?php class Person { public $sex; public $name; public $age; public function __construct($name="", $age=25, $sex='男') { $this->name = $name; $this->age = $age; $this->sex = $sex; } public function __clone() { echo __METHOD__."你在克隆工具<br>"; } } $person = new Person('小明'); // 初始赋值 $person2 = clone $person; var_dump('persion1:'); var_dump($person); echo '<br>'; var_dump('persion2:'); var_dump($person2);
看后果:
Person::__clone你在克隆工具 string(9) "persion1:" object(Person)#1 (3) { ["sex"]=> string(3) "男" ["name"]=> string(6) "小明" ["age"]=> int(25) } string(9) "persion2:" object(Person)#2 (3) { ["sex"]=> string(3) "男" ["name"]=> string(6) "小明" ["age"]=> int(25) }
克隆胜利。
以上就是PHP中__clone()办法详解的具体内容,更多请存眷资源魔其它相干文章!
标签: php开发教程 php开发资料 php开发自学 clone()
版权声明:除非特别标注,否则均为本站原创文章,转载时请以链接形式注明文章出处。
抱歉,评论功能暂时关闭!