Home >Backend Development >PHP Tutorial >php在clone时访问原对象内容

php在clone时访问原对象内容

WBOY
WBOYOriginal
2016-06-06 20:44:54791browse

$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

Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn