📜  php 克隆 - PHP (1)

📅  最后修改于: 2023-12-03 15:03:41.233000             🧑  作者: Mango

PHP 克隆 - 概述

在 PHP 中,克隆是一种创建对象副本的方法。对象克隆是一种创建新对象的实例的方法,这些对象拥有与原始对象相同的属性值和方法。与创建新对象不同的是,使用克隆方法创建的新对象的值是从原始对象中获取的。

在 PHP 中,对象克隆是使用 __clone() 魔术方法来实现的。__clone() 方法在对象被克隆时自动调用。通常,__clone() 方法用于创建一个新的对象,该对象的值表示原始对象的属性的副本。

PHP 克隆 - 示例

以下是一个示例,说明如何使用 PHP 克隆。

class User {
    private $firstName;
    private $lastName;
    
    public function __construct($firstName, $lastName) {
        $this->firstName = $firstName;
        $this->lastName = $lastName;
    }

    public function setFirstName($firstName) {
        $this->firstName = $firstName;
    }

    public function setLastName($lastName) {
        $this->lastName = $lastName;
    }

    public function getFullName() {
        return $this->firstName . ' ' . $this->lastName;
    }

    public function __clone() {
        $this->firstName = 'Clone of ' . $this->firstName;
    }
}

// 创建一个用户
$user1 = new User('John', 'Doe');
echo $user1->getFullName(); // 输出 "John Doe"

// 克隆用户
$user2 = clone $user1;
echo $user2->getFullName(); // 输出 "Clone of John Doe"

// 修改克隆后的用户的 First Name
$user2->setFirstName('Jane');
echo $user2->getFullName(); // 输出 "Clone of Jane Doe"

// 原始用户未受影响
echo $user1->getFullName(); // 输出 "John Doe"

在上面的示例中,我们创建了一个 User 类,该类具有一个 setFirstName()、setLastName() 和 getFullName() 方法。我们还实现了一个 __clone() 魔术方法,在克隆 User 对象时自动调用。

我们创建了一个名为 $user1 的 User 对象,并输出了 $user1->getFullName() 的结果。接下来,我们通过克隆 $user1,创建了另一个名为 $user2 的 User 对象,并输出了 $user2->getFullName() 的结果。由于我们在 __clone() 方法中修改了 $this->firstName,因此 $user2 的名称前缀为 "Clone of "。

我们在 $user2 上调用了 setFirstName() 方法,将 $user2 的 First Name 设置为 "Jane",并输出了 $user2->getFullName() 的结果。

我们再次输出 $user1->getFullName() 的结果,可以看到原始用户未受到影响。