为了账号安全,请及时绑定邮箱和手机立即绑定

为什么要用__clone魔术方法?明明可以不用啊?( 见代码注释)

class Car {

    public $name = 'car';

//不懂下面的克隆函数有啥用,明明就算不用它,依然可以用clone复制啊???    

/*    public function __clone() {

        $obj = new Car();

        $obj->name = $this->name;

    }*/

}

$a = new Car();

$a->name = 'new car';

$b = clone $a;//这个克隆和直接赋值=又有啥差别呢?

if ($a == $b) echo '==';   //true

if ($a === $b) echo '==='; //false


$str = serialize($b); //对象序列化成字符串

echo $str.'<br>';

$c = unserialize($str); //反序列化为对象

var_dump($c);


正在回答

4 回答

http://www.imooc.com/video/3689

1 回复 有任何疑惑可以回复我~
#1

野生码农在线co腚

简单的来说__clone()可以自定义复制后对象的属性初期值.
2017-04-18 回复 有任何疑惑可以回复我~
#2

Datcg 提问者 回复 野生码农在线co腚

现在新版本的php好像慢慢禁用魔术方法了。。。
2017-04-20 回复 有任何疑惑可以回复我~
#3

野生码农在线co腚 回复 Datcg 提问者

先把我的答案采纳了,谢谢。
2017-04-20 回复 有任何疑惑可以回复我~
#4

Datcg 提问者 回复 野生码农在线co腚

哈哈!好的。
2017-04-20 回复 有任何疑惑可以回复我~
#5

菜鸟Wenco 回复 野生码农在线co腚

666刚我也想问来着!
2018-04-27 回复 有任何疑惑可以回复我~
#6

carol_PHP

感谢分享!
2019-10-31 回复 有任何疑惑可以回复我~
查看3条回复

clone函数里的东西可以不用,课程里面只是为了让大家看得清楚

你把clone函数的东西去掉,也能运行。

0 回复 有任何疑惑可以回复我~


使用_clone() 就将屏蔽_clone() 内的 复制 永远初始化

0 回复 有任何疑惑可以回复我~

用__clone魔术方法可以让你克隆之后的代码重复利用,减少你代码的重复率。


0 回复 有任何疑惑可以回复我~
#1

Datcg 提问者

不是这个意思,看我代码,屏蔽了__clone(),不也可以复制吗?
2017-04-09 回复 有任何疑惑可以回复我~

举报

0/150
提交
取消

为什么要用__clone魔术方法?明明可以不用啊?( 见代码注释)

我要回答 关注问题
意见反馈 帮助中心 APP下载
官方微信