本文目录一览:
- 1、PHP对象的浅复制与深复制的实例详解
- 2、怎么在php中使用clone复制对象
- 3、php对象赋值问题
- 4、php clone后是什么对象
- 5、php问题 克隆对象和引用对象的区别是什么
- 6、PHP对象克隆clone用法示例
PHP对象的浅复制与深复制的实例详解
PHP对象的浅复制与深复制的实例详解
最近在看原型模式时注意到这个问题~~PHP中对象
'='
与‘clone'的区别
实例代码:
//聚合类
class
ObjA
{
public
$num
=
0;
public
$objB;//包含的对象
function
__construct()
{
$this-objB
=
new
ObjB();
}
//只有实现了下面方法聚合类
才能实现深复制
/*function
__clone()
{
$this-objB
=
clone
$this-objB;
}*/
}
class
ObjB
{
public
$num2
=
0;
}
//原型对象
$objA
=
new
ObjA();
//复制对象(‘='复制引用)
$objA2
=
$objA;
$objA2-num
=
2;
//随着$objA2-num的变化
$objA-num也变化了
print_r($objA-num.'br/');//结果为2
print_r($objA2-num.'br/');//结果为2
//复制对象(‘clone'关键字克隆)
$objA3
=
clone
$objA;
$objA3-num
=
4;
//随着$objA3-num的变化
$objA-num没有变化
print_r($objA-num.'br/');//结果为2
print_r($objA3-num.'br/');//结果为4
//但是clone的对象(是聚合类)中包含其他对象时所包含的对象(objB)复制的是引用
$objA3-objB-num2
=
7;
print_r($objA3-objB-num2.'br/');//结果是7
print_r($objA-objB-num2.'br/');//结果是7/pre
如有疑问请留言或者到本站社区交流讨论,感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!
怎么在php中使用clone复制对象
(1)调用Cbitmap类的LoadBitmap函数调入位图资源。
(2)调用CDC::CreatCompatibleDC函数创建一个内存设备环境,以便位图在内存中保留下来,并于指定设备环境兼容。
php对象赋值问题
你这个是直接赋值了,然后又操作了$instance,没有操作$assigned,赋值的意思是,你在内存中开辟了一个空间,内容和$instance一样,所以你操作$instance,不会对$assigned有影响。
正确的应该是这样的:
第一行:$assigned = $instance;
这个就是把$assigned 和 $instance 指向了同一个内存地址,改变了$instance,$assigned当然也改变了。
php clone后是什么对象
在php5中,对象的传递方式默认为引用传递,如果我们想要在内存中生成两个一样的对象或者创建一个对象的副本,这时可以使用“克隆”。
通过 clone 克隆一个对象
对象的复制是通过关键字 clone 来实现的。用 clone 克隆出来的对象与原对象没有任何关系,它是把原来的对象从当前的位置重新复制了一份,也就是相当于在内存中新开辟了一块空间。通过关键字 clone 可以克隆一个对象,语法格式如下:
$克隆对象名称=clone $原对象名称;
__clone()方法
对象的__clone()方法不能够直接被调用,只有当通过关键字 clone 克隆一个对象时才可以使用该对象调用__clone()方法。当创建对象的一个副本时,php5将会检查__clone()方法是否存在。如果不存在,那 么它就会调用默认的__clone()方法,复制对象的所有属性。如果__clone方法已经定义过,那么__clone()方法就会负责设置新对象的属 性。所以在__clone()方法中,只需要覆盖那些需要更改的属性就可以了。例子如下:
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程序设计有所帮助。