6
回答
php对象克隆的实际意义
利用AWS快速构建适用于生产的无服务器应用程序,免费试用12个月>>>   
最近看php的基础知识看到一个关于php的克隆对象的知识点,感觉这个没什么太大的实际项目意义,请问大家只要有什么实际的意义吗?我们在实战项目中哪里可以体现出这个呢?
PHP
举报
共有6个答案 最后回答: 1年前

$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一个,然后做同样的设置,但是这只会消耗性能。


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

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

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

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

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

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