如何创建一个PHP类,其中一个函数可以自行克隆?

use*_*912 1 php clone this

基本上,我需要将此对象的过去版本存储在数组中的当前状态.就像是:

 public class MyClass{
     $n = 0;
     $array = array()

     storeOldVersion(){
          $this->array[] = clone $this;
     }
 }
Run Code Online (Sandbox Code Playgroud)

我知道我做的事情就像"clone $ this-> n",但我怎样才能真正克隆MyClass对象本身,并将其存储到MyClass对象所拥有的数组中?

谢谢

Sui*_*oth 6

你提出的实际工作,除了你有一些不正确的代码.以下版本有效:

class MyClass{
     protected $n = 0;
     public $array = array();

     public function storeOldVersion(){
          $this->array[] = clone $this;
          $this->n = 2;
     }
 }

$a = new MyClass();
$a->storeOldVersion();

echo "<pre>";
var_dump( $a ); // retuns class with n = 2
var_dump( $a->array ); // return array with one class having n = 0
Run Code Online (Sandbox Code Playgroud)

但是有一个警告的话

如果不止一次调用storeOldVersion(),它会递归克隆包含其他克隆的"数组",并且您的对象可能会以指数方式变得非常大.在将数组存储在数组中之前,您应该从克隆中取消设置数组变量.

例如

$clone = clone $this;
$clone->array = array();
$this->array[] = $clone;
Run Code Online (Sandbox Code Playgroud)