php - 如何编写我自己的克隆函数

标签 php oop clone

<分区>

每一种面向对象的语言(或支持 OOP 的语言),无论是 C++、Java、Python、PHP 都有自己的 clone 函数,它可以返回一个对象的深拷贝或浅拷贝目的。谁能告诉我如何为深拷贝和浅拷贝从头开始创建我自己的clone 函数?显然我不能使用任何语言结构,如 serialize,更不用说 clone 本身了! PHP 中的示例会很棒,尽管任何其他语言也很好,我需要知道如何去做,仅此而已。

最佳答案

第 1 部分

/* memcpy example */
#include <stdio.h>
#include <string.h>

struct {
  char name[40];
  int age;
} person, person_copy;

int main ()
{
  char myname[] = "Pierre de Fermat";

  /* using memcpy to copy string: */
  memcpy ( person.name, myname, strlen(myname)+1 );
  person.age = 46;

  /* using memcpy to copy structure: */
  memcpy ( &person_copy, &person, sizeof(person) );

  printf ("person_copy: %s, %d \n", person_copy.name, person_copy.age );

  return 0;
}

取自http://www.cplusplus.com/reference/clibrary/cstring/memcpy/

第 2 部分

1

我假设您需要复制复杂对象的所有子元素(如图 1 中复制假想对象 A,如果您只需要复制黑色对象但保持不变,则可以使用我上面链接的代码其他作为引用,下面的伪代码适用于你是否也想复制它的所有子项) 上图显示了现实如何以及我们如何看待一个对象

function MyCloneRecursive(object A) : object
{
    pointer Cpy;
    allocate memory to Cpy;
    memcpy(&Cpy,&A,sizeof(A))
    //now copy all its child elements
    //assuming there is a way to do a foreach that
    //for object A there are A.B,A.C and inside A.B there is D
    //and childname={"B","C"} and inside of B childname={"D"}
    for each childname in object A 
    {
        eval("Cpy." + childname + "=MyCloneRecursive(A." + childname + ")");
    }
}

//note this is really bad programming 
//clone function is better written in the runtime
//(or its a part of the intepreter not a includable code)

关于php - 如何编写我自己的克隆函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12988022/

相关文章:

php - 我们如何从文件中获取文本(逐字)到 PHP 中的二维数组中?

java - 为什么我的方法不能正常工作?

Java clone() 方法使用 new 关键字和复制构造函数而不是 super.clone()

php - Twig_Error_Loader : Template is not defined - Drupal

php - 图像不水平显示

java - java读写数据报错

javascript - 我如何在javascript中克隆图像

javascript - 在 Javascript/jQuery 中克隆隐藏元素

php - 在中等流量网站上实现消息队列的最佳方式是什么

wcf - 如何正确扩展WCF返回的类?