首页 >后端开发 >php教程 >php在clone时访问原对象内容

php在clone时访问原对象内容

WBOY
WBOY原创
2016-06-06 20:44:54786浏览

$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

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn