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程序设计有所帮助。

(0)

相关推荐

  • PHP类和对象相关系统函数与运算符小结

    本文总结了PHP类和对象相关系统函数与运算符.分享给大家供大家参考,具体如下: 系统函数 class_exists() 判断某个类是否存在 interface_exists() 判断接口是否存在 get_class() / __CLASS__ 获取某个对象所处的类名 get_parent_class() 获取某个对象所属父类的类名 get_class_methods() 获取一个类所有方法,返回索引数组 get_class_vars() 获取一个类所有属性,下标为属性名 get_declared

  • 自己写的php curl库实现整站克隆功能

    有时候经常会用到一些在线手册,比如国内或国外的,有些是访问速度慢,有些是作者直接吧网站关闭了,有些是服务器总是宕机,所以还是全盘克隆到自己服务器比较爽. 库特点: 给定一初始连接,初始链接以下的层级所有文件会拷贝到本地. 多次克隆可以配置是否覆盖. 可以配置是否下载图片. 所有链接替换为相对链接,所以可以随便rewrite. 绝对不会出现文件覆盖等问题. 最NB的特点是,没有比这更NB的库了. SVN:http://svn.phpdr.net/repos/ares/php/library/tru

  • PHP简单遍历对象示例

    本文实例讲述了PHP简单遍历对象的方法.分享给大家供大家参考,具体如下: 对象可以使用foreach进行遍历,只能遍历属性以及访问范围内的 <?php class bee{ public $a = 1; protected $b = 2; private $c = 3; } $obj = new bee(); foreach($obj as $key => $val){ echo $key.'-'.$val; } 运行结果如下: a-1 更多关于PHP相关内容感兴趣的读者可查看本站专题:<

  • 关于phpwind克隆用户的方法

    作者:lcx 来源:vbs小铺 首先将字符集中的174转一下,wscript.echo "%"&CStr(Hex(ascb(chrb(174)))),url编码的结果为%AE.当然你用别的字符集里(129-255)的也可以, 我用的是174.然后用achilles(安焦有下),修改post数据,在用户名后加上%AE提交即可.你用别的即时提交工具,好比mini browse也是可以的,这样可以防止注册码的问题.

  • PHP数据对象PDO操作技巧小结

    本文实例讲述了PHP数据对象PDO操作技巧.分享给大家供大家参考,具体如下: PHP 数据对象 (PDO) 扩展为PHP访问数据库定义了一个轻量级的一致接口. <?php try { $dsn = "mysql:host=localhost; port=3306; dbname=wsq_hotel; charset=utf-8"; $user = 'root'; $psw ='root'; $pdo = new PDO($dsn,$user,$psw); $sql = 'sele

  • php实现对象克隆的方法

    本文实例讲述了php实现对象克隆的方法.分享给大家供大家参考.具体如下: <?php //定义类staff,其中包括属性id和name class staff { private $id; private $name; function setID($id) { $this->id = $id; } function getID() { return $this->id; } function setName($name) { $this->name = $name; } func

  • PHP编程中的__clone()方法使用详解

    可以在对象类中定义一个__clone()方法来调整对象的克隆行为.此方法的代码将在克隆操作期间执行.除了将所有现有对象成员复制到目标对象之外,还会执行__clone()方法指定的操作.下面修改Corporate_Drone类,增加以下方法: function __clone() { $this->tiecolor = "blue"; } 之后,创建一个新的Corporate_Drone对象,增加employeeid成员的值,克隆这个对象,然后输出一些数据,从而显示克隆对象的tie

  • php面向对象全攻略 (十一)__toString()用法 克隆对象 __call处理调用错误

    16.__toString()方法 我们前面说过在类里面声明"- "开始的方法名的方法(PHP 给我们提供的),都是在 某一时刻不同情况下自动调用执行的方法,"__toString()"方法也是一样自动被调用的,是在 直接输出对象引用时自动调用的, 前面我们讲过对象引用是一个指针,比如说:"$p=new Person()"中,$p 就是一个引用,我们不能使用echo 直接输出$p,这样会输出"Catchable fatal error:

  • 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 $ob

  • PHP面向对象程序设计之对象克隆clone和魔术方法__clone()用法分析

    本文实例讲述了PHP面向对象程序设计之对象克隆clone和魔术方法__clone()用法.分享给大家供大家参考,具体如下: 1.对象克隆 clone PHP4面向对象功能一个很大的缺点,是将对象视为另一种数据类型,这使得很多常见的OOP方法无法使用,如设计模式.这些方法依赖于将对象作为引用传递给其他类方法,而不是作为值传递,而按值传递却是PHP的默认做法.幸好,PHP5解决了这个问题,现在所有对象在默认情况下都被视为引用.但是,由于所有对象都被视为引用而不是值,所以现在复制对象更为困难.如果尝试

  • JavaScript字符串对象(string)基本用法示例

    本文实例讲述了JavaScript字符串对象(string)基本用法.分享给大家供大家参考,具体如下: 1.获取字符串的长度: var s = "Hello world"; document.write("length:"+s.length); 2.为字符串添加各种样式,如: var txt = "Some words"; document.write("<p>Big: " + txt.big() + "

  • JavaScript日期对象(Date)基本用法示例

    本文实例讲述了JavaScript日期对象(Date)基本用法.分享给大家供大家参考,具体如下: 1.获取当前日期: document.write("Current time: "+new Date()); 2.获取时间戳(毫秒): document.write(new Date().getTime()); 3.设置年月日(年为必选,月日为可选): var d = new Date(); d.setFullYear(2016,3,16) document.write(d); docum

  • JS几个常用的函数和对象定义与用法示例

    本文实例讲述了JS几个常用的函数和对象定义与用法.分享给大家供大家参考,具体如下: <html> <head> <title>js几种常见的函数</title> <meta charset="UTF-8"/> <script type="text/javascript"> //string类中的函数 var str="clannad"; // var m=str.toUppe

  • JavaScript 防篡改对象的用法示例

    javascript防篡改对象 这个东西吧,用到的很少,个人感觉用处不大,但是,可以作为装逼的利器,哈哈,开搞.. 1.不可扩展对象 默认情况下对象都是可以扩展的,也就是说,任何时候都可以向对象中添加属性和方法.现在使用Object.preventExtensions(object)方法可以改变这个行为,让你不能再给对象添加属性和方法.例如: var person={name : 'jack'}; Object.preventExtensions(person); person.age=13;

  • python中hashlib模块用法示例

    我们以前介绍过一篇Python加密的文章:Python 加密的实例详解.今天我们看看python中hashlib模块用法示例,具体如下. hashlib hashlib主要提供字符加密功能,将md5和sha模块整合到了一起,支持md5,sha1, sha224, sha256, sha384, sha512等算法 具体应用 #!/usr/bin/env python # -*- coding: UTF-8 -*- #pyversion:python3.5 #owner:fuzj import h

  • laravel学习笔记之模型事件的几种用法示例

    前言 本文主要给大家介绍了关于laravel模型事件用法的相关内容,文中通过示例代码介绍了laravel模型事件的多种用法,下面话不多说了,来一起看看详细的介绍吧. 用法示例 一 .简单粗鲁(用于本地测试) 路由中定义: Event::listen('eloquent.updated: App\Post',function (){ dump('测试一下修改事件'); }); Route::post('/post/{id}', 'PostController@update'); 二 .生成事件和监

  • Kryo序列化及反序列化用法示例

    Kryo 是一个快速高效的 Java 对象图形序列化框架,主要特点是性能.高效和易用.该项目用来序列化对象到文件.数据库或者网络. 代码地址:https://github.com/EsotericSoftware/kryo 样例代码地址:https://github.com/nettm/public Kryo的序列化及反序列速度很快,据说很多大公司都在用.我在把对象序列化都转换成了字符串形式,是为了把对象存储到缓存中.我们日常项目中使用的数据形式包括对象.List.Set和Map,因此主要把这几

随机推荐