本文目录一览:
- 1、php问题 克隆对象和引用对象的区别是什么
- 2、PHP对象克隆clone用法示例
- 3、在php中 clone 对象的值可以改变吗?(对象1中$var=2, 对象2克隆对象1 ,对象2.$var=3,print 对象1.$var;)
php问题 克隆对象和引用对象的区别是什么
复制文件、建立快捷方式的区别,克隆就是复制,引用就是快捷方式,引用的对象实际上同一个东西,修改任何一个变量,另外一个也会跟着变化。
PHP对象克隆clone用法示例
本文实例讲述了PHP对象克隆clone用法。分享给大家供大家参考,具体如下:
浅克隆:只是克隆对象中的非对象非资源数据,即对象中属性存储的是对象类型,则会出现克隆不完全
?php
class
B{
public
$val
=
10;
}
class
A{
public
$val
=
20;
public
$b;
public
function
__construct(){
$this-b
=
new
B();
}
}
$obj_a
=
new
A();
$obj_b
=
clone
$obj_a;
$obj_a-val
=
30;
$obj_a-b-val
=
40;
var_dump($obj_a);
echo
'br';
var_dump($obj_b);
运行结果如下:
object(A)[1]
public
'val'
=
int
30
public
'b'
=
object(B)[2]
public
'val'
=
int
40
object(A)[3]
public
'val'
=
int
20
public
'b'
=
object(B)[2]
public
'val'
=
int
40
深克隆:一个对象的所有属性数据都彻底的复制,需要使用魔术方法__clone(),并在里面实现深度克隆
?php
class
B{
public
$val
=
10;
}
class
A{
public
$val
=
20;
public
$b;
public
function
__construct(){
$this-b
=
new
B();
}
public
function
__clone(){
$this-b
=
clone
$this-b;
}
}
$obj_a
=
new
A();
$obj_b
=
clone
$obj_a;
$obj_a-val
=
30;
$obj_a-b-val
=
40;
var_dump($obj_a);
echo
'br';
var_dump($obj_b);
运行结果如下:
object(A)[1]
public
'val'
=
int
30
public
'b'
=
object(B)[2]
public
'val'
=
int
40
object(A)[3]
public
'val'
=
int
20
public
'b'
=
object(B)[4]
public
'val'
=
int
10
更多关于PHP相关内容感兴趣的读者可查看本站专题:《php面向对象程序设计入门教程》、《PHP基本语法入门教程》、《PHP运算与运算符用法总结》、《PHP网络编程技巧总结》、《PHP数组(Array)操作技巧大全》、《php字符串(string)用法总结》、《php+mysql数据库操作入门教程》及《php常见数据库操作技巧汇总》
希望本文所述对大家PHP程序设计有所帮助。
在php中 clone 对象的值可以改变吗?(对象1中$var=2, 对象2克隆对象1 ,对象2.$var=3,print 对象1.$var;)
对象克隆后,得到是一个对象的实例,并将数据复制一份,两者各自的数据都是独立的。请参看以下代码:
?php
class corporatedrone {
private $employeeid;
private $tiecolor;
function setEmployeeID($employeeid) {
$this-employeeid = $employeeid;
}
function getEmployeeID() {
return $this-employeeid;
}
function setTiecolor($tiecolor) {
$this-tiecolor = $tiecolor;
}
function getTiecolor() {
return $this-tiecolor;
}
}
// 建立对象1
$drone1 = new corporatedrone();
// 设置对象1属性
$drone1-setEmployeeID("12345");
$drone1-setTiecolor("red");
// 克隆对象1
$drone2 = clone $drone1;
// 设置对象2属性
$drone2-setEmployeeID("67890");
// 输出两个对象的成员属性
echo "对象1 employeeID: ".$drone1-getEmployeeID()."br /";
echo "对象1 tie color: ".$drone1-getTiecolor()."br /";
echo "对象2 employeeID: ".$drone2-getEmployeeID()."br /";
echo "对象2 tie color: ".$drone2-getTiecolor()."br /";
?