l 基本介绍 :

当我们需要将一个对象完全的赋值一份, 保证两个对象的属性和属性值一样,但是他们的数据库空间独立,则可以使用对象克隆。

<?php
header('content-type:text/html;charset=utf-8');
//__clone 魔术方法 class Sheep{
public $name;
protected $food; public function __construct($name, $food){
$this->name = $name;
$this->food = $food;
} //__clone 的魔术方法 //如果我们希望阻止克隆, 则将该__clone 声明为private即可
//在很多设计模式中,就会使用到这个特点-比如说,单例模式 public function __clone(){
//在克隆一个对象时,可以在这个 __clone 函数中去修改某个属性(如果有必须要的)
//$this->food = '青草';
echo '<br> __clone被调用';
}
} $sheep1 = new Sheep('多利', '青草'); //看一下对象的赋值方式
$sheep2 = $sheep1; //讲一下对象的比较 //当使用比较运算符(==)比较两个对象变量时,比较的原则是:如果两个对象的属性和属性值 都相等,而且两个对象是同一个类的实例,那么这两个对象变量相等 if($sheep2 == $sheep1 ){
echo '<br> $sheep2 == $sheep1';
} //而如果使用全等运算符(===),这两个对象变量一定要指向某个类的同一个实例(即同一个对象)。
if($sheep2 === $sheep1 ){
echo '<br> $sheep2 === $sheep1';
} // $sheep3 = new Sheep('多利', '<。)#)))≦');
//对象的克隆, 会触发__clone 的魔术方法
$sheep3 = clone $sheep1; if($sheep3 == $sheep1){
echo '<br> $sheep3 == $sheep1';
} if($sheep3 === $sheep1){
echo '<br> $sheep3 === $sheep1';
}

说明

(1) 当我们 $对象1 = clone $对象2, 会触发 __clone 方法

(2) 如果我们希望在克隆时,修改某个属性,则在__clone方法中去修改即可

(3) 如果我们希望阻止克隆,只需要将 __clone 魔术方法申明为private 即可.

PHP面向对象魔术方法之__clone函数的更多相关文章

  1. PHP面向对象魔术方法之__call函数

    l 基本介绍: (1) 当我们调了一个不可以访问的成员方法时,__call魔术方法就会被调用. (2) 不可以访问的成员方法的是指(1. 该成员方法不存在, 2. 成员方法是protected或者 p ...

  2. PHP面向对象魔术方法之__toString函数

    l 基本介绍: 当我们希望将一个对象当做字符串来输出时,就会触发__toString魔术方法. <?php header('content-type:text/html;charset=utf- ...

  3. PHP面向对象-----魔术方法

    PHP面向对象-----魔术方法 __get($name)--触发时机:当调用一个不访问的成员属性的时候,会自动触发,可以利用这个方法来完成对不可调用的属性进行调用,但是不能设置值 ___set($n ...

  4. PHP面向对象魔术方法之__get 和 __set函数

    l 基本的介绍 (1) 当我们去使用不可以访问的属性时,系统就会调用__get方法. (2) 不可以访问的属性指的是(1 . 该属性不存在 2. 直接访问了protected或者private属性) ...

  5. php里面用魔术方法和匿名函数闭包函数动态的给类里面添加方法

    1.认识  __set  (在给不可访问属性赋值时,__set() 会被调用) 也就是说你再访问一个类里面没有的属性,会出发这个方法 class A{ private $aa = '11'; publ ...

  6. PHP面向对象魔术方法基本了解

    简单介绍 (1) 魔术方法都是系统提供,程序员使用即可. (2) 所有的魔术方法,前面都是以  __ 开头的 _是两个下划线. (3) 我们在自定义函数时,就不要使用 __开头了. (4) 魔术方法是 ...

  7. python面向对象魔术方法补充

    一.描述符 在 面向对象 编程中 定义一个(没有定义方法)类:class person , 在这个类里面,有name,age, heigth, weight,等等属性, 这个类就可以看作一个对 per ...

  8. PHP中的面向对象魔术方法大全

    1.__construct  构造方法 2.__destruct  析构方法 3.__get 获取成员值 4.__set 设定成员值 5.__isset 判断成员值 6.__unset unset成员 ...

  9. 20191125PHP抽象类、接口和魔术方法

    抽象类 不能被实例化,用于其他类的继承.使用abstract(抽象).抽象方法一定是抽象类,抽象类不一定有抽象方法. 接口interface是特殊的抽象类. eg: <?php //抽象类 ab ...

随机推荐

  1. js中变量对象和活动对象的区别 闭包时的区别

    变量对象:就是执行环境中包含了所有的变量和函数的对象 活动对象:正在被执行或引用的变量和函数 在上述代码中 ,全局定义了函数compare()和变量result,后台会创建一个作用域链(scope c ...

  2. Python Django主机管理

    1.新建一个django project项目 django-admin startproject DjangoWeb 2.新建app python manage.py startapp master ...

  3. 在vue中使用handsontable

    1.使用npm安装 npm install handsontable @handsontable/vue 2.定义结构 <hot-table :settings="hotSetting ...

  4. TYVJ1061 Mobile Service

    P1061 Mobile Service 时间: 1000ms / 空间: 131072KiB / Java类名: Main 描述 一个公司有三个移动服务员.如果某个地方有一个请求,某个员工必须赶到那 ...

  5. NX二次开发-获取按钮的ID UF_MB_ask_button_id

    NX9+VS2012 1.打开D:\Program Files\Siemens\NX 9.0\UGII\menus\ug_main.men 找到装配和PMI,在中间加上一段 TOGGLE_BUTTON ...

  6. Linux命令(1):date

    查看时间: date "+%Y-%m-%d %H:%M:%S" 参数说明: %n : 下一行 %t : 跳格 %H : 小时(00..23) %I : 小时(01..12) %k ...

  7. (转)Java安全通信:HTTPS与SSL

    转:http://www.cnblogs.com/devinzhang/archive/2012/02/28/2371631.html 1. HTTPS概念 1)简介 HTTPS(全称:Hyperte ...

  8. CF1265B Beautiful Numbers

    题意 给一个长度为\(n\)的排列\(P\),求对于\(1\) 到 \(n\)中的每个数\(m\),是否能找到一段长度为\(m\)的区间使得区间内的数是一个\(1\)到\(m\)的排列. 输出一个\( ...

  9. jQuery 基本使用

    index.html <head><meta http-equiv="Content-Type" content="text/html; charset ...

  10. class5_Radiobutton 选择按钮(选项选择)

    最终的运行效果图(程序见序号4) #!/usr/bin/env python# -*- coding:utf-8 -*-# -------------------------------------- ...