Maison >développement back-end >tutoriel php >php在clone时访问原对象内容

php在clone时访问原对象内容

WBOY
WBOYoriginal
2016-06-06 20:44:54787parcourir

$p2 克隆自 $p1,我希望在 __clone() 注释的位置输出一句“我克隆自:Evan”,应该怎么写?
仿佛听说有 $that 这个东西,但是不能用。在 Manual 中也没有找到相关的介绍。
代码如下:

<code><?php class Person {
    private $name;

    function __construct($name="") {
        $this -> name = $name;
    }

    function __clone() {
        $this -> name = "WenryXu";
        //echo "我克隆自:".name
    }

    function say()  {
        echo "我的名字是:".$this -> name."<br>";
    }
}

$p1 = new Person("Evan");
$p1 -> say();
$p2 = clone $p1;
$p2 -> say();
</code>

期望的结果是:

<code>我的名字是:Evan
我克隆自:Evan
我的名字是:WenryXu
</code>

谢谢各位!

回复内容:

$p2 克隆自 $p1,我希望在 __clone() 注释的位置输出一句“我克隆自:Evan”,应该怎么写?
仿佛听说有 $that 这个东西,但是不能用。在 Manual 中也没有找到相关的介绍。
代码如下:

<code><?php class Person {
    private $name;

    function __construct($name="") {
        $this -> name = $name;
    }

    function __clone() {
        $this -> name = "WenryXu";
        //echo "我克隆自:".name
    }

    function say()  {
        echo "我的名字是:".$this -> name."<br>";
    }
}

$p1 = new Person("Evan");
$p1 -> say();
$p2 = clone $p1;
$p2 -> say();
</code>

期望的结果是:

<code>我的名字是:Evan
我克隆自:Evan
我的名字是:WenryXu
</code>

谢谢各位!

代码如下,应该不难想的

<code class="lang-php"><?php header("Content-Type: text/plain; charset=utf-8");

class Person {
    private $name;

    function __construct($name="") {
        $this -> name = $name;
    }

    function __clone() {
        echo "我克隆自:".$this -> name."\n";
        $this -> name = "WenryXu";
    }

    function say()  {
        echo "我的名字是:".$this -> name."\n";
    }
}

$p1 = new Person("Evan");
$p1 -> say();
$p2 = clone $p1;
$p2 -> say();
</code>

<code class="lang-php"><?php class Person {
    private $name;

    function __construct($name="") {
        $this->name = $name;
    }

    function __clone() {
        echo "我克隆自:" . $this->name . "\n";
        $this->name = "WenryXu";
    }

    function say()  {
        echo "我的名字是:".$this->name."\n";
    }
}

$p1 = new Person("Evan");
$p1->say();
$p2 = clone $p1;
$p2->say();
</code>

这样就可以了
事实上 clone 只是浅复制
复制时对象内的成员变量都只是引用
所以直接调用就能获取到原来的值

输出
我的名字是:Evan
我克隆自:Evan
我的名字是:WenryXu

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn