Maison >développement back-end >tutoriel php >php在clone时访问原对象内容
$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