php对象克隆的实际意义

士兵7 发布于 2016/11/03 09:36
阅读 627
收藏 0
PHP
最近看php的基础知识看到一个关于php的克隆对象的知识点,感觉这个没什么太大的实际项目意义,请问大家只要有什么实际的意义吗?我们在实战项目中哪里可以体现出这个呢?
加载中
0
CC_make
CC_make
php里面意义不大 别的语言里还是有用的
0
吔宩吖你
吔宩吖你

$builder = User::where('username', 'like', '%a%')->where('created_at','>','2016-11-01');

$b1 = clone $builder;

echo $b1->get('max(`age`)');

print_r($builder->get());


比如进行着多个同样的设置和赋值,但是在接下来使用产生了分支,就可以先设置完毕一个,然后clone一个一摸一样的。

虽然你也可以用再new一个,然后做同样的设置,但是这只会消耗性能。


0
朱__朱
朱__朱

当面对一个需求,你从所有的知识点中可以选择最佳的方案,也许对于某个需求clone正是最佳方案,你的知识储备越多,问题解决的就越快越好。

而不是捧着某个知识点,想什么情况下会用到它,一时没想出来,就以为它没用放弃了它。

0
Tuesday
Tuesday

PHP有许多地基式语法, 仅仅是参考其它语言而留下的语法, 作用不大. 

主要限制是在内存, 其它语言内存都持久的, 如C, java, delphi, 而php内存是随即释放的, 所以有些语法不适用. 一般用不上.

eechen
eechen
也不能这样说,这还得看选择PHP的工作方式,如果是像WorkerMan和Swoole的PHP服务,也是常驻内存的守护进程.
0
龙上
龙上
我开发PHP这么多年都没有想过要用这个克隆。JS倒是有用过
eechen
eechen
JS中复制关联数组的值,需要先JSON.stringify(arr)转成字符串.使用时用JSON.parse(str)转回来.
0
eechen
eechen
http://cn2.php.net/clone
PHP官方文档里说到的场景是PHP-GTK程序里的窗口复制:
在多数情况下,我们并不需要完全复制一个对象来获得其中属性。但有一个情况下确实需要:如果你有一个 GTK 窗口对象,该对象持有窗口相关的资源。你可能会想复制一个新的窗口,保持所有属性与原来的窗口相同,但必须是一个新的对象(因为如果不是新的对象,那么一个窗口中的改变就会影响到另一个窗口)。还有一种情况:如果对象 A 中保存着对象 B 的引用,当你复制对象 A 时,你想其中使用的对象不再是对象 B 而是 B 的一个副本,那么你必须得到对象 A 的一个副本。

@乌龟壳 PHP赋值时,默认值复制(写时复制),支持用&实现引用赋值.特别地,PHP对象默认是引用赋值,而不是值复制,PHP对象复制需要通过clone关键字来完成.上次讨论的时候漏了这点.
乌龟壳
乌龟壳
回复 @eechen : 不过平常都是array用的多,class只是用来划分模块的
乌龟壳
乌龟壳
回复 @乌龟壳 : 同样是$a = $b,如果$b是array则值赋值,如果是class k的实例,则引用赋值,我说的是这个,容易让人混淆。
eechen
eechen
回复 @乌龟壳 : 因为要生成一个新的对象,只需new,其实new就可以认为是值复制,而对象的复制则需要用特殊的clone,并不乱,倒是JS不好,把关联数组和对象混做一体.
乌龟壳
乌龟壳
php怎么设计得这么混乱,class实例化后又是引用赋值?
返回顶部
顶部