如何在PHP中克隆一个对象数组?
我有一系列对象.我知道对象通过"参考"和数组通过"值"分配.但是,当我分配数组时,数组的每个元素都在引用对象,因此当我在任一个数组中修改对象时,更改会反映在另一个. 是否有一种简单的方法来克隆数组,或者我必须循环克隆每个对象? 解决方案 当您复制数组时,引用对同一对象的引用已被复制.但这听起来好像您想浅拷贝 deeppopy当您创建第二个数组时在第一个数组中引用的对象,因此您会得到两个不同但相似的对象的数组. 我现在可以提出的最直观的方式是循环.那里可能有更简单或更优雅的解决方案: $new = array(); foreach ($old as $k => $v) { $new[$k] = clone $v; } 其他解决方案 $array = array_merge(array(), $myArray); 其他解决方案 您需要克隆对象以避免对同一对象进行引用. function array_copy($arr) { $ne
0 2023-05-30
编程技术问答社区
深度克隆对象:Clone vs Serialize
我有此功能重复的目标是...重复课程对象 public function duplicateCourseAction(Request $request) { if ($this->getRequest()->isXmlHttpRequest() == false) { return new Response("Bad request", 405); } $em = $this->getDoctrine()->getManager(); $parameters = $request->request->all(); $course = $em->getRepository('EntTimeBundle:Course')->findOneById($parameters['id']); $duplicate = clone $course; $duplicate->setDate(new \DateTime($p
0 2023-05-29
编程技术问答社区
在主机上启用system()和exec()函数?
我是一个开发人员,我在服务器上构建客户端站点,然后使用PHP脚本将其克隆到完成后将其克隆到客户端的服务器上.我这次尝试了,但是遇到了 的错误 "您的主机不允许使用系统()和exec() 功能." 任何想法如何启用?我有cpanel访问权限,主机帐户是greengecko.com.安装WordPress很容易,我只是无法运行此脚本! 解决方案 如果您的主机禁用了这些功能,则无法启用它们.您可以考虑与主机联系,以查看他们是否可以启用他们的每个帐户,或者您是否正在使用免费托管,则可以考虑升级到其托管的付费版本,以启用这些功能.出于安全原因,主机被主机禁用.但是,如果要联系您的Web主机或尝试升级到付费托管(如果还没有). 其他解决方案 一些托管提供商可以使能够覆盖 php.ini 来自在.htaccess(如果APACHE HTTPD)或使用单独的php.ini文件中,则来自托管帐户目录中的某个地方. 我不熟悉您的托管提供商,因此无法评论是否可能.但是,我可
0 2023-05-28
编程技术问答社区
Laravel Eloquent ORM复制
我有一个与所有关系复制我的模型之一的问题. 数据库结构如下: Table1: products id name Table2: product_options id product_id option Table3: categories id name Pivot table: product_categories product_id category_id 关系是: 产品Hasmany Product_options 产品属于Stomany类别(槽产品product_categories) 我想克隆所有关系的产品.目前是我的代码: $product = Product::with('options')->find($id); $new_product = $product->replicate(); $new_product->push(); foreach($product->options as $option){ $new_o
0 2023-05-27
编程技术问答社区
克隆对我不起作用?
我有某个类的对象$objDummy ClassDummy,而另一个是 $objClone = clone $objDummy; 然后,我也更改了$objClone,$objDummy的任何更改. 我不想这样做. 我该如何工作? 编辑: 响应克里斯. 这是一个示例 myVar = new myAnotherObject(); } } $nl = "\n"; //* $nl = ' '; //*/ $obj1 = new myObject(); echo 'obj1->myVar->myAnotherVar: '.$obj1->myVar->myA
0 2023-05-27
编程技术问答社区
Symfony2/Doctrine: 如何将一个带有OneToMany的实体重新保存为一个层叠的新行
首先,这个问题类似于如何在学说2中重新保存实体为另一行 不同的是,我正在尝试将数据保存在具有OneTomany关系的实体中.我想在父实体(在"一个"侧)中重新弥补该实体作为新行,然后在每个后续的孩子中(在"许多"方面). 我使用了一个非常简单的教室,有很多学生来保持简单. 所以我可能有ID = 1的classrooma,并且有5名学生(IDS 1至5).我想知道我如何在Doctrine2中使用该实体并将其重新归档到数据库中(在潜在的数据更改之后),全部具有新的ID,并且在Persist/flush期间原始行不变. 首先定义我们的学说实体. 教室实体: namespace Acme\TestBundle\Entity; use Doctrine\ORM\Mapping as ORM; use Doctrine\Common\Collections\ArrayCollection; /** * @ORM\Entity * @ORM\Table(name
0 2023-05-26
编程技术问答社区
PHP深层克隆对象
场景:从数据库中获取电子邮件模板,然后循环通过收件人列表,为每个收件人个性化. 我的电子邮件模板作为嵌套对象返回.看起来有点像这样: object(stdClass) { ["title"] => "Event Notification" ["sender"] => "notifications@mysite.com" ["content"] => object(stdClass) { ["salutation"] => "Dear %%firstname%%," ["body"] => "Lorem ipsum %%recipient_email%% etc etc..." } } 然后我循环通过收件人,将此$电子邮件对象传递给个性化()函数: foreach( $recipients as $recipient ){ $email_body = personalise( $email, $r
0 2023-05-26
编程技术问答社区
在PHP中对象的复制与克隆
考虑以下内容: $object1 = new stdClass(); $object2 = $object1; $object3 = clone $object1; $object1->content = 'Ciao'; var_dump($object1); // Outputs object(stdClass)#1 (1) { ["content"]=> string(4) "Ciao" } var_dump($object2); // Outputs object(stdClass)#1 (1) { ["content"]=> string(4) "Ciao" } var_dump($object3); // Outputs object(stdClass)#2 (0) { } $object2的正常PHP行为是否具有与$object1>? 相同的内容 对我来说,听起来像$object2是对$object1而不是复制的引用. 在更改内容之前将对象克隆起来确实
0 2023-05-26
编程技术问答社区
什么是php中的对象克隆?
有人可以解释我 php中的对象是什么? 我什么时候应该在PHP中使用克隆关键字? 解决方案 对象克隆是制作对象副本的行为.如 cody 指出,通过在PHP中进行克隆来完成物体的浅副本.这意味着克隆对象的内部对象将而不是克隆,除非您通过定义魔术方法__clone(). 如果您不使用__clone方法,则新对象的内部对象将引用内存中的相同OBJEC,作为克隆原始对象的内部对象. 考虑以下示例: // in this exampe the internal member $_internalObject of both objects // reference the same instance of stdClass in memory. class CloneableClass { private $_internalObject; public function __construct() { // instan
0 2023-05-26
编程技术问答社区
在PHP中,谁能解释一下克隆与指针引用?
首先,我了解编程和对象,但是在PHP中对我来说并没有多大意义. 在PHP中,我们使用&运算符检索对变量的引用.我理解一个参考是一种具有不同变量的"事物"的方式.如果我说例如 $b = 1; $a =& $b; $a = 3; echo $b; 会输出3,因为对$ a的更改与$ b的更改相同.相反: $b = 1; $a = $b; $a = 3; echo $b; 应输出1. 如果是这种情况,为什么需要克隆的关键字?在我看来,如果我设置 $obj_a = $obj_b然后对$ obj_a进行的更改不应影响$ obj_b, 相反 但是,在PHP中,即使没有参考操作员($obj_a = $obj_b)分配了$ obj_a上的某些操作,也会影响$ obj_b.今天,这给我带来了令人沮丧的问题,而我最终通过进行的DateTime对象进行了工作: : $obj_a = clone $obj_b 但是,我编写的大多数PHP代码似乎不需要像在这种情况
0 2023-05-26
编程技术问答社区
Perl。我怎样才能编辑shared_clone的结构?
跟随以下问题: 当我想循环几个线程中的一些哈希并更新它们时,我会收到以下错误: Thread .. terminated abnormally: Invalid value for shared scalar at ... 这是代码: use feature qw(say); use strict; use warnings; use threads ; use threads::shared ; use Data::Dumper qw(Dumper); my %h1 = (a => 1, b => 2); my %h2 = (c => 3, d => 4); my $a1 = \%h1; my $b1 = \%h2; my $a1c = shared_clone($a1); my $b1c = shared_clone($b1); my $lockvar:shared; my $nthreads = 3; for ( 1..$nthreads ) {
0 2023-05-24
编程技术问答社区
在Perl中对数据结构进行深度复制的最佳方法是什么?
给定数据结构(例如哈希斯的哈希),制作深层副本的干净/推荐方法是什么?假设数据并非特别大,没有复杂的周期以及可读性/可维护性/等的合理案例.不惜一切代价比速度更重要. 我知道我可以使用存储, clone clone ,clone ::更多, data :: dumper 等.当前的最佳实践是什么? 解决方案 Clone比Storable::dclone快得多,但是后者支持更多的数据类型. Clone::Fast和Clone::More如果内存适合我,则几乎是等效的,但功能少于克隆,Scalar::Util::Clone Scalar::Util::Clone支持甚至更少,但IIRC是某些结构中最快的. 关于可读性,这些都应该相同,它们几乎可以互换. 如果您没有特定的性能,我只会使用Storable的DClone. 我不会仅仅因为它是如此笨拙且回旋.可能也很慢. 对于它的价值,如果您想要可自定义的克隆,那么Data::Visitor提供钩子功能,并且
2 2023-05-24
编程技术问答社区
克隆一个Postgres表,包括索引和数据
我正在尝试使用PLPGSQL创建Postgres表的克隆. 迄今为止,我一直在截断表2并从表1中重新插入数据. TRUNCATE TABLE "dbPlan"."tb_plan_next"; INSERT INTO "dbPlan"."tb_plan_next" SELECT * FROM "dbPlan"."tb_plan"; 作为预期的代码,这是" dbplan"." tb_plan"包含约300万个记录,因此在大约20分钟内完成.这太长了,对其他过程的影响有所震撼. 必须将所有约束,索引和数据精确地复制到表2. 很重要. 我曾尝试放下桌子并重新创建它,但是这并不能提高速度. DROP TABLE IF EXISTS "dbPlan"."tb_plan_next"; CREATE TABLE "dbPlan"."tb_plan_next" (LIKE "dbPlan"."tb_plan" INCLUDING ALL); INSERT INTO "dbPl
0 2023-05-24
编程技术问答社区
克隆一个HashSet<T>的有效方法?
几天前,我回答了一个有趣的问题 HashSet.一个可能的解决方案涉及克隆标签,在我的回答中,我建议这样做这样的事情: HashSet original = ... HashSet clone = new HashSet(original); 尽管这种方法非常简单,但我怀疑它效率很低:新的HashSet的构造函数需要从原始标签中分别添加每个项目,并且检查是否尚未存在.这显然是浪费时间:由于源收集是ISet,因此可以保证不包含重复项.应该有一种利用这些知识的方法... 理想情况下,HashSet应该实现ICloneable,但不幸的是情况并非如此.我还与反射器进行了检查,以查看HashSet构造函数是否对源收集是标签的特定操作,但事实并非如此.这可能是通过在私有字段上使用反射来完成的,但这将是一个丑陋的骇客... 那么,有人提出了一个聪明的解决方案来更有效地克隆标签吗? (请注意,这个问题纯粹是理论上的
0 2023-05-23
编程技术问答社区
如何克隆图像?
我有一个图像.我需要精确地副本并将其保存到BufferedImage中,但是没有image.clone().东西应该在计算循环内部,因此它应该非常快,没有像素复制.做到这一点的最佳方法是什么? 解决方案 您可以绘制到缓冲图像,因此制作一个空白 BufferedImage ,从其创建图形上下文,然后将您的原始图像绘制到它. BufferedImage copyOfImage = new BufferedImage(widthOfImage, heightOfImage, BufferedImage.TYPE_INT_RGB); Graphics g = copyOfImage.createGraphics(); g.drawImage(originalImage, 0, 0, null); 其他解决方案 还有另一种方法: BufferedImage copyOfImage = image.getSubimage(0, 0, image.getWidth,
0 2023-05-23
编程技术问答社区
如何从perforce repo的中间克隆git-p4?
我想克隆我的仓库的后半部分.它使用命令正确工作: git-p4 clone --detect-branches //depot@all 所以我想在下面运行类似的内容,但是它不会以相同的方式导入文件,最终会失败: git-p4 clone --detect-branches //depot@2000,3000 如何获得第二种正确工作的方法? 更新:我现在得到的输出是P4被卡在无限循环中: current change 32688 trying: earliest latest 6135ce72f69ce262a6237c98da9ffee652be8b03 Reading pipe: git rev-list --bisect 6135ce72f69ce262a6237c98da9ffee652be8b03 Reading pipe: git cat-file commit 6135ce72f69ce262a6237c98da9ffee652be8b03
0 2023-05-23
编程技术问答社区
如何安全地克隆PDO对象?
我尝试使用$pdo2 = clone $pdo来克隆PDO实例,但是我在某些PHP版本中获得了意外的行为: 当php≥7中使用克隆对象时,发生误差. PDO属性在HHVM中的原始对象和克隆对象之间链接. php 5中的一切都可以. 这是一个复制问题的代码: $pdo1 = new \PDO('sqlite::memory:'); $pdo1->setAttribute(\PDO::ATTR_ERRMODE, \PDO::ERRMODE_EXCEPTION); echo "PDO 1 is OK\n"; $pdo2 = clone $pdo1; $pdo2->setAttribute(\PDO::ATTR_ERRMODE, \PDO::ERRMODE_WARNING); echo "PDO 2 is OK\n"; echo $pdo1->getAttribute(\PDO::ATTR_ERRMODE) === $pdo2->getAttribute(\PDO::A
2 2023-05-22
编程技术问答社区
用密码中的斜线克隆一个 repo
克隆可以使用 来完成回购 git clone https://username:password@github.com/username/repository.git 但是,当密码包含前向斜线时,这是行不通的.错误是: error: Couldn't resolve host 'klaus777:password' while accessing https://klaus777:password/.@bitbucket.org/romeo/server-code.git/info/refs fatal: HTTP request failed 如果我对斜线进行编码,我会收到以下错误: error: The requested URL returned error: 401 while accessing https://klaus777:password%2F%2E@bitbucket.org/romeo/server-code.git/info/refs
0 2023-05-21
编程技术问答社区
修改一个作为方法参数传递的数组
假设我有一个int-array,我想修改它.我知道我无法将新数组分配给传递的数组作为参数: public static void main(String[] args) { int[] temp_array = {1}; method(temp_array); System.out.println(temp_array[0]); // prints 1 } public static void method(int[] n) { n = new int[]{2}; } 虽然我可以修改它: public static void main(String[] args) { int[] temp_array = {1}; method(temp_array); System.out.println(temp_array[0]); // prints 2 } public static void method(int[] n
0 2023-05-20
编程技术问答社区
为什么对象会自动通过引用传递?
我有一个关于c#的通过引用和逐次传递和逐次传递的问题的一般问题: 在C#中,这是一个明确创建可以接受指针/引用以将其传递给该方法的方法的要求.但是,至少作为对方法/构造函数的参数传递的对象与其他对象的行为不同.如果没有如下所述完成额外的克隆,似乎总是通过引用传递: http://zetcode.com/lang/csharp/oopii/. 为什么对象自动通过参考传递? 强迫他们的克隆过程有什么特殊的好处,而不是更像int,double,boolean等. 这是说明我的意思的代码示例: using System; public class Entry { public class MyColor { public int r = 0; public int g = 0; public int b = 0; public double a = 1; public MyC
0 2023-05-20
编程技术问答社区