php中对象引用和复制实例分析
作者:koastal 发布时间:2023-10-20 23:05:02
本文实例讲述了php中对象引用和复制。分享给大家供大家参考,具体如下:
引用
$tv2 = $tv1;
或者
$tv2 = &$tv1;
以上两种方式,效果是一样的。可以理解为linux里面的硬链接。
克隆(浅复制)
$tv2 = clone $tv1;
“浅复制”:被复制对象的所有变量都含有与原来的对象相同的值,而所有的对其他对象的引用都仍然指向原来的对象。也就是说,浅复制仅仅复制所考虑的对象,而不复制它所引用的对象。
深复制
$tv4 = unserialize(serialize($tv1));
相对于“浅复制”,当然也有一个“深复制”:被复制的对象的所有的变量都含有与原来的对象相同的值,除去那些引用其他对象的变量。也就是说,深复制把要复制的对象所引用的对象都复制了一遍。
代码示例
<?php
header("Content-type:text/html;charset=utf-8");
class TvControl{
}
class Tv{
private $color;
private $tvControl;
function __construct(){
$this->color = "black";
$this->tvControl = new TvControl();
}
function setColor($color){
$this->color = $color;
}
function getColor(){
return $this->color;
}
function getTvControl(){
return $this->tvControl;
}
}
$tv1 = new Tv();
$tvControl1 = $tv1->getTvControl();
echo "原始类:";
var_dump($tv1);
echo "<hr/>";
$tv2 = $tv1;
echo "引用类:";
var_dump($tv2);
echo "<hr/>";
$tv3 = clone $tv1;
echo "克隆(浅复制):";
var_dump($tv3);
echo "<hr/>";
$tv4 = unserialize(serialize($tv1));
echo "深复制:";
var_dump($tv4);
输出结果:
原始类:
object(Tv)[1]
private 'color' => string 'black' (length=5)
private 'tvControl' =>
object(TvControl)[2]
引用类:
object(Tv)[1]
private 'color' => string 'black' (length=5)
private 'tvControl' =>
object(TvControl)[2]
克隆(浅复制):
object(Tv)[3]
private 'color' => string 'black' (length=5)
private 'tvControl' =>
object(TvControl)[2]
深复制:
object(Tv)[4]
private 'color' => string 'black' (length=5)
private 'tvControl' =>
object(TvControl)[5]
参考文章:https://www.aspxhome.com/article/167631.htm
希望本文所述对大家PHP程序设计有所帮助。
来源:https://blog.csdn.net/koastal/article/details/52163483
猜你喜欢
- 下载并选择MySQL的安装包由于MySQL一直在升级,所以当您阅读本文时,或许在其官方网站上已提供了新的正式版供你下载,因此,以下提供的链接
- 如何在线压缩Access数据库?Access数据库可以在线压缩吗?可以的,代码和说明见下:compact.asp<%option&nb
- Microsoft SQL Server 2000的会话上下文信息使应用程序得以设置二进制值,以便在同一会话或连接上运行的多个批处理、存储过
- 我们以用户查询语句为 https://www.aspxhome.com/chunfeng.asp为例来查询用户资料将从数据库Contact1
- 1. Http标准库1.1 http客户端func main() {response, err := http.Get("http
- 本文实例讲述了PHP排序二叉树基本功能实现方法。分享给大家供大家参考,具体如下:这里演示了排序二叉树节点的插入,中序遍历,极值的查找和特定值
- 通常用户看到的页面的样式会受到三层控制,第一层是浏览器的默认样式,第二层是网页定义样式,第三层是用户自定义样式。和CSS一样,后面的优先级高
- 时候难免需要直接调用Shell命令来完成一些比较简单的操作,比如mount一个文件系统之类的。那么我们使用Python如何调用Linux的S
- Oracle9i之前,中文是按照二进制编码进行排序的。在oracle9i中新增了按照拼音、部首、笔画排序功能。 1、
- 现在网页设计师除了把页面做的漂亮以外,越来越注重“用户体验”,就是要做“别让用户思考”的网页,使网站真正做到“可用性”。望望结合几年的工作经
- 如果我们想对一个表的每一行做出比较复杂的操作,大多会想到用游标,本文中,我们将换一种思路,用SQL Server 2005中的新函数ROW_
- 阅读上一章:Chapter 14 图片替换Chapter 15 为<body>指定样式把内容与显示效果分开设定的好处之一就是灵活
- 网络上有很多个性化的404页面,但是404页面不仅仅是个性化展示,404页面本来目的是:告诉浏览者其所请求的页面不存在或链接错误,同时引导用
- 如何做一个分页程序? 这在ASP中确实容易实现,但需要技巧,看看下面的分页代码和说明: <angu
- 在安排Web页面的布局时,最常用的方法之一是用HTML表格界定页面的结构。例如,假设Web页面由顶端的
- 它在Lynx里也会运行得很好:<%@ Language=VBScript %><HTML><
- 假如读者已经熟悉了ASP 2.0,并正在寻找3.0版本中的实际改变的列表,那么将在下面发现这些信息。假如读者是一个ASP的初学者,可以越过本
- 相信没有人不知道 Firebug 是什么东西,但有时候我们糟糕的代码不想让同行轻松的使用 F12 就能一览无遗。那么怎么办呢?这里有个猥琐的
- 如果你使用过大部分,那么你的ASP功力应该是非常高的了ADO对象(太常用了):ConnectionCommandRecordSetRecor
- 以下为测试例子。 1.首先创建两张临时表并录入测试数据: 代码如下:create table #temptest1 ( id i