php中对象引用和复制实例分析

 更新时间:2019年08月14日 10:33:09   作者:koastal  
这篇文章主要介绍了php中对象引用和复制,结合实例形式分析了php对象引用和复制的相关实现方法与操作注意事项,需要的朋友可以参考下

本文实例讲述了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.jb51.net/article/167631.htm

更多关于PHP相关内容感兴趣的读者可查看本站专题:《php面向对象程序设计入门教程》、《PHP数组(Array)操作技巧大全》、《PHP基本语法入门教程》、《PHP运算与运算符用法总结》、《php字符串(string)用法总结》、《php+mysql数据库操作入门教程》及《php常见数据库操作技巧汇总

希望本文所述对大家PHP程序设计有所帮助。

相关文章

  • thinkphp(php)插件钩子(hooks)分析的简单实现机制

    thinkphp(php)插件钩子(hooks)分析的简单实现机制

    现在主流的cms或者blog等系统中,都内置的有插件系统,但是层层深入、剖析实现的方式,其实都是最简单的钩子的复杂化的实现。这篇文章主要介绍了thinkphp(php)插件钩子(hooks)分析的简单实现机制,需要的朋友可以参考下
    2023-03-03
  • PHP isset()及empty()用法区别详解

    PHP isset()及empty()用法区别详解

    这篇文章主要介绍了PHP isset()及empty()用法区别详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-08-08
  • PHP url 加密解密函数代码

    PHP url 加密解密函数代码

    这是一种方式,但是是最安全的,因为只要知道这个原理就可以解开,不过你的要求不高这样就可以了.
    2011-08-08
  • php 攻击方法之谈php+mysql注射语句构造

    php 攻击方法之谈php+mysql注射语句构造

    由于PHP和MYSQL本身得原因,PHP+MYSQL的注射要比asp困难,尤其是注射时语句的构造方面更是个难点,本文主要是借对Okphp BBS v1.3一些文件得简单分析,来谈谈php+mysql注射语句构造方式,希望本文对你有点帮助。
    2009-10-10
  • PHP中数组处理函数的使用方法详解

    PHP中数组处理函数的使用方法详解

    这篇文章主要为大家介绍了一些PHP中的数组处理函数,文中结合实例详解了PHP数组处理函数的功能与使用技巧,需要的朋友可以参考一下
    2022-04-04
  • php实现基于微信公众平台开发SDK(demo)扩展的方法

    php实现基于微信公众平台开发SDK(demo)扩展的方法

    这篇文章主要介绍了php实现基于微信公众平台开发SDK(demo)扩展的方法,包括处理文本消息、天气、翻译、聊天信息及自定义菜单等,需要的朋友可以参考下
    2014-12-12
  • 2017年最新PHP经典面试题目汇总(上篇)

    2017年最新PHP经典面试题目汇总(上篇)

    这篇文章主要介绍了2017年最新PHP经典面试题目汇总(上篇),非常不错,具有参考借鉴价值,需要的朋友可以参考下
    2017-03-03
  • php调用C代码的实现方法

    php调用C代码的实现方法

    本篇文章主要是对php调用C代码的实现方法进行了介绍,需要的朋友可以过来参考下,希望对大家有所帮助
    2014-03-03
  • PHP扩展Swoole实现实时异步任务队列示例

    PHP扩展Swoole实现实时异步任务队列示例

    这篇文章主要介绍了PHP扩展Swoole实现实时异步任务队列,结合实例形式分析了PHP扩展Swoole实现实时异步任务队列相关客户端与服务器端操作技巧,需要的朋友可以参考下
    2019-04-04

最新评论