PHP面向对象魔术方法之__clone函数
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函数的更多相关文章
- PHP面向对象魔术方法之__call函数
l 基本介绍: (1) 当我们调了一个不可以访问的成员方法时,__call魔术方法就会被调用. (2) 不可以访问的成员方法的是指(1. 该成员方法不存在, 2. 成员方法是protected或者 p ...
- PHP面向对象魔术方法之__toString函数
l 基本介绍: 当我们希望将一个对象当做字符串来输出时,就会触发__toString魔术方法. <?php header('content-type:text/html;charset=utf- ...
- PHP面向对象-----魔术方法
PHP面向对象-----魔术方法 __get($name)--触发时机:当调用一个不访问的成员属性的时候,会自动触发,可以利用这个方法来完成对不可调用的属性进行调用,但是不能设置值 ___set($n ...
- PHP面向对象魔术方法之__get 和 __set函数
l 基本的介绍 (1) 当我们去使用不可以访问的属性时,系统就会调用__get方法. (2) 不可以访问的属性指的是(1 . 该属性不存在 2. 直接访问了protected或者private属性) ...
- php里面用魔术方法和匿名函数闭包函数动态的给类里面添加方法
1.认识 __set (在给不可访问属性赋值时,__set() 会被调用) 也就是说你再访问一个类里面没有的属性,会出发这个方法 class A{ private $aa = '11'; publ ...
- PHP面向对象魔术方法基本了解
简单介绍 (1) 魔术方法都是系统提供,程序员使用即可. (2) 所有的魔术方法,前面都是以 __ 开头的 _是两个下划线. (3) 我们在自定义函数时,就不要使用 __开头了. (4) 魔术方法是 ...
- python面向对象魔术方法补充
一.描述符 在 面向对象 编程中 定义一个(没有定义方法)类:class person , 在这个类里面,有name,age, heigth, weight,等等属性, 这个类就可以看作一个对 per ...
- PHP中的面向对象魔术方法大全
1.__construct 构造方法 2.__destruct 析构方法 3.__get 获取成员值 4.__set 设定成员值 5.__isset 判断成员值 6.__unset unset成员 ...
- 20191125PHP抽象类、接口和魔术方法
抽象类 不能被实例化,用于其他类的继承.使用abstract(抽象).抽象方法一定是抽象类,抽象类不一定有抽象方法. 接口interface是特殊的抽象类. eg: <?php //抽象类 ab ...
随机推荐
- 在GitHub上编辑README.md排版样式
如何在github的readme.md编辑出好看的样式排版文章呢...? 参考:https://blog.csdn.net/u012067966/article/details/50736647
- windows10 自动配置切换IP
办公室与家里的ip网段不一样.每次都要来回修改本地无线WLAN IP段.写了个脚本bat,自动配置WLAN IP,方便切换. 建立 auto-set-ip.bat,保存格式需为ANSI,否则中文会乱码 ...
- 3年A班,从现在起大家都是人质-观后感
花了2天时间观看了由小室直子.铃木勇马.水野格导演,武藤将吾编剧的3年A班日剧. 这部剧我觉得很擅长用对比的手法,将一个受欢迎的老师人前人后强烈对比,一群外表成熟,内心却始终还是孩子气的学生对比,也将 ...
- PHP ftp_rawlist() 函数
定义和用法 ftp_rawlist() 函数返回 FTP 服务器上指定目录中文件的详细列表. 语法 ftp_rawlist(ftp_connection,dir,recursive) 参数 描述 ft ...
- bzoj1025题解
[题意分析] 定义一个等价类为满足如下条件的一个极大的集合Q:∀t∈Q,k∈N+,若tk∈全集R,都成立tk∈Q. 给定n,记[1,n]∩N上所有排列置换的全集为R.求对于所有的等价类Q,card({ ...
- NX二次开发-UFUN获取环境变量路径,将环境变量转换为字符串,字符串拼接UF_translate_variable
NX9+VS2012 #include <uf.h> UF_initialize(); //UFUN获取环境变量路径 //将环境变量转换为字符串 char* GetName = NULL; ...
- NX二次开发-UFUN设置视图边界线显示隐藏UF_DRAW_set_border_display
#include <uf.h> #include <uf_draw.h> #include <uf_drf.h> #include <uf_obj.h> ...
- Codeforces 1166B - All the Vowels Please
题目链接:http://codeforces.com/problemset/problem/1166/B 个元音. 思路:先判断能否弄出至少5*5的行列,然后按顺序填字符串就好了. AC代码: #in ...
- 什么是css块级元素和内联元素
CSS文档流与块级元素(block).内联元素(inline),文档流这个概念理解了它,一堆CSS布局的理论都 变得易于理解,并且体会到CSS这套设计的合理性所在. 文档流 将窗体自上而下分成一行行, ...
- 【收集+】DDR5 vs DDR4
Advantages of Migrating to DDR5 DDR5 is the next evolution in DRAM, bringing a robust list of new fe ...