首页 后端开发 php教程 php中对象的复制与克隆

php中对象的复制与克隆

Jun 28, 2018 pm 03:35 PM

* 对象的复制与克隆

 * 1.默认情况下,对象是引用传递(实际上是对象标识符的复制,后面会详细说)

 * 2.也就是说二个对象变量实际上是引用的是同一个对象

 * 3.如果要创建一个新的对象,必须使用clone关键字来克隆当前对象

 * 4.当使用clone关键字时,如果类中有__clone()会自动调用

 * 5.__clone()方法运行在新创建的对象上面

 * 6.__clone()方法能控制我们复制什么,以及克隆时要完成的基本操作

class Member
{
    //声明三个私有属性
    private $name;  //会员名
    private $email; //会员邮箱
    private $score; //会员积分
    
    //构造方法
    public function __construct($name='',$email='',$score=0)
    {
        $this->name = $name;
        $this->email = $email;
        $this->score = $score;
    }
    
    //查询器(暂时省略访问控制)
    public function __get($name)
    {
        return $this->$name;
    }
    
    //设置器(暂时省略访问控制)
    public function __set($name,$value)
    {
        $this->$name = $value;
    }
    
    //克隆魔术方法在对象克隆时自动调用,针对新对象进行初始化操作
    public function __clone()
    {
        $this->score = 0;
    }
    
}
登录后复制

//实例化会员类Member,创建会员对象$member

$member = new Member('peter','peter@php.cn',1000);
登录后复制

//访问测试

echo $member->score;
登录后复制
登录后复制
登录后复制

//复制会员对象

$member1 = $member;
登录后复制

//使用新变量名$member1来更新对象信息

$member1->score = 2000;
登录后复制

//用新对象变量名$member1访问

echo $member1->score;
echo &#39;<hr>&#39;;
登录后复制

//用原对象对象名$member访问

echo $member->score;
登录后复制
登录后复制
登录后复制

* 结论:

* 1.新变量修改的结果反映到了原对象变量中

* 2.说明这二个变量,实际上指向的是同一个对象

* 3.也就是对象默认是引用传递

* 4.或者说,第二个变量名$member1只是原变量的别名,并没创建新对象

* 5.可以理解为仅仅是将原对象的标识符,重新起了一个新名称罢了

var_dump($member1);  //对象id=1
var_dump($member);   //对象id=1
登录后复制

//说明$member1和$member是二个完全一样的对象,仅仅是名称不同罢了

//如果想完全创建一个全新的对象应该如何做呢?需要使用关键字:clone

$member2 = clone $member;
登录后复制

//我们先查看一下对象变量$member2的score属性值

echo $member2->score; //目前是原始值2000
登录后复制

//修改score值

$member2->score = 5000;
echo &#39;<hr>&#39;;
登录后复制

//再次查看$member2中的score

echo $member2->score; //新值5000
echo &#39;<hr>&#39;;
登录后复制

//大家想一下,我的这种修改,会不会影响到原$member变量的score属性值呢?

echo $member->score; //发现原对象的score属性值仍为2000,未发生变化
登录后复制

//这是为什么呢?因为我们使用了克隆技术,创建了二个完全不同的对象变量

//下面进行验证

var_dump($member); //变量id是1
var_dump($member2); //变量id是2
登录后复制

//这二个对象变量的id是不同的,说明是二个完全不同的对象

//下面完成这样的一个任务:创建新的会员对象的时候,将该会员的积分清零?应该怎么做?

//在Memeber类中创建一个__clone()克隆魔术方法,对克隆出的新对象进行预处理

//再演示一遍

//查看当前会积分

echo $member->score;
登录后复制
登录后复制
登录后复制

//克隆创建一个全新的对象$member3

$member3 = clone $member;
登录后复制

//查看新对象$member3的score值,以验证类中的__clone()是否生效?

echo &#39;<hr>&#39;;
echo $member3->score; //0,说明克隆魔术方法已经生效
登录后复制

以上是php中对象的复制与克隆的详细内容。更多信息请关注PHP中文网其他相关文章!

本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

热AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover

AI Clothes Remover

用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool

Undress AI Tool

免费脱衣服图片

Clothoff.io

Clothoff.io

AI脱衣机

AI Hentai Generator

AI Hentai Generator

免费生成ai无尽的。

热工具

记事本++7.3.1

记事本++7.3.1

好用且免费的代码编辑器

SublimeText3汉化版

SublimeText3汉化版

中文版,非常好用

禅工作室 13.0.1

禅工作室 13.0.1

功能强大的PHP集成开发环境

Dreamweaver CS6

Dreamweaver CS6

视觉化网页开发工具

SublimeText3 Mac版

SublimeText3 Mac版

神级代码编辑软件(SublimeText3)

php对象操作和数组操作哪个快 php对象操作和数组操作哪个快 Jul 12, 2023 pm 03:04 PM

php数组操作比php对象操作更快,其原因有:1、对象操作涉及创建对象、调用方法和访问属性等步骤,在性能上可能会比较慢;2、数组操作是一种特殊类型的变量,可以容纳多个值,对数组使用不同的方法和函数,可以对数组进行快速和有效的操作。

php数组如何循环转为对象 php数组如何循环转为对象 Aug 10, 2023 pm 02:44 PM

php数组循环转为对象的方法有两个:1、使用强制类型转换可以将数组转换为对象,要求数组的键必须是有效的对象属性名;2、创建一个新的对象,并将数组的元素复制到该对象中,不依赖于数组键是否有效作为对象的属性名。

php对象和数组区别是什么 php对象和数组区别是什么 Aug 24, 2023 pm 05:02 PM

php对象和数组区别是:1、对象是一个复合数据类型,而数组是一个简单的数据类型;2、对象的属性和方法可以通过对象的实例来访问,而数组的元素可以通过索引来访问;3、对象是一个封装了属性和方法的实体,而数组是一个有序的元素集合;4、对象在PHP中是通过引用来传递的,而数组在PHP中是通过值来传递的;5、对象适用于描述具有状态和行为的实体,而数组适用于存储和处理大量的相似数据。

php数组是对象吗 php数组是对象吗 Jul 22, 2022 pm 05:24 PM

php数组不是对象。在php中,数组和对象是两种不同的数据类型,数组是一组有序数据的集合;而对象是类进行实例化后的结果,里面不仅有属性,还有方法。对象可以封装对数据的操作,而数组是办不到的。

如何在PHP中使用对象变量 如何在PHP中使用对象变量 Sep 13, 2023 pm 12:59 PM

如何在PHP中使用对象变量,需要具体代码示例在PHP中,使用对象变量可以更方便地管理和操作对象。对象变量是存储对象实例的一种数据类型,可以通过调用类的方法和访问类的属性来操作对象。下面将具体介绍在PHP中如何使用对象变量,并提供相应的代码示例。创建对象在PHP中,可以使用new关键字来创建对象。示例如下:classCar{public$colo

php怎么获取一个对象中所有的方法 php怎么获取一个对象中所有的方法 Mar 23, 2023 am 11:12 AM

在PHP中,获取一个对象中所有的方法非常简单,可以利用PHP标准库中的 ReflectionClass 类实现。ReflectionClass 类提供了在PHP中反射一个类的所有信息的方法,包括类名、属性和方法等。下面我们详细介绍如何使用 ReflectionClass 类来获取一个对象中所有的方法。

探讨如何在PHP中调用对象方法 探讨如何在PHP中调用对象方法 Mar 28, 2023 pm 03:00 PM

PHP是一种非常流行的编程语言,可以用于开发各种应用程序,尤其是Web应用程序。在PHP中,面向对象编程是其重要特性之一。本文将探讨如何在PHP中调用对象方法。

php对象转数组是什么 php对象转数组是什么 Aug 03, 2023 pm 05:10 PM

php对象转数组是指将一个php对象转换为一个关联数组的过程,在php中,对象是类的实例化,具有属性和方法,而数组是由一系列的键值对组成的数据结构。通过手动转换、使用“get_object_vars()”函数或使用类型转换运算符,可以实现对象到数组的转换,可以方便地处理和传递数据,提高代码的可读性和维护性。

See all articles