PHP clone 关键词

定义和用法

clone 关键字用于创建对象的副本。

如果对象的任何属性是对另一个变量或对象的引用,则只复制该引用。对象总是通过引用来传递,所以如果原始对象在其属性中有另一个对象,则副本将指向同一个对象。可以通过在类中创建 __clone() 方法来改变这种行为。

相关页面

教程:PHP 类和对象

实例

例子 1

创建对象的副本:

<?php
class MyClass {
  public $color;
  public $amount;
}

$obj = new MyClass();
$obj->color = "red";
$obj->amount = 5;
$copy = clone $obj;
print_r($copy);
?>

亲自试一试

例子 2

创建带有引用的对象副本:

<?php
class MyClass {
  public $amount;
}

// 创建一个带有引用的对象
$value = 5;
$obj = new MyClass();
$obj->amount = &$value;

// 克隆对象
$copy = clone $obj;

// 更改原始对象中的值
$obj->amount = 6;

// 副本已更改
print_r($copy);
?>

亲自试一试

例子 3

使用 __clone() 方法来打破被复制对象中的引用:

<?php
class MyClass {
  public $amount;
  public function __clone() {
    $value = $this->amount;
    unset($this->amount); // 取消设置会中断引用 Unset breaks references
    $this->amount = $value;
  }
}

// 创建一个带有引用的对象
$value = 5;
$obj = new MyClass();
$obj->amount = &$value;

// 克隆对象
$copy = clone $obj;

// 更改原始对象中的值
$obj->amount = 6;

// 副本未更改
print_r($copy);
?>

亲自试一试