PHP面向对象之对象和引用
在PHP中对象类型和简单变量类型表现可以说是大相径庭,很多数据类型都要可以在写时进行复制,如当写代码$a=$b时,两个变量因为赋予相同的值而告终。所以需要注意的是,这种情况用在对象时就会完全不同了。
我们来看看下面的代码,你期望输出什么值呢?
01 |
<?php |
02 |
class Person{ |
03 |
|
04 |
public $name="张三"; |
05 |
public function say(){ |
06 |
echo "我叫". $this->name ."<br>" ; |
07 |
} |
08 |
} |
09 |
$Person=new Person(); |
10 |
$Person->name="李四"; |
11 |
$Person1=$Person; |
12 |
$Person1-> name="王五" ; |
13 |
$Person->say(); |
14 |
$Person1->say(); |
上面的程序出输:
我叫王五
我叫王五
我们来看一下为什么会得出这样的结果。当将$Person赋值给$Person1时,并没有复制$Person的内容。相反,PHP使用了另一种方式将$Person1指向同一个对象。这种方式就是PHP的对象引用。PHP 的对象的引用接近指针,它储存着该对象的一个“标识符”(类似地址),传递对象时是在拷贝这个标识符,而不是内容。
要想知道对象$Person和$Person1是否拥有相同的类和属性,可以通过使用“==”操作符来比较这两个对象。代码如下(承接上面的代码):
1 |
if($Person == $Person1){ |
2 |
echo "Person和Person1具有相同的类和属性" ; |
3 |
}else{ |
4 |
return false; |
5 |
} |
程序输出:Person和Person1具有相同的类和属性
要想知道对象$Person和$Person1是否拥有相同的类和属性,并且存储在相同的位置,可以通过使用“===”操作符来比较这两个对象。代码如下:
1 |
if ($Person === $Person1){ |
2 |
echo "Person和Person1具有相同的类和属性且存储在相同的位置" ; |
3 |
} else{ |
4 |
return false ; |
5 |
} |
程序输出:Person和Person1具有相同的类和属性且存储在相同的位置
最后,如果我们希望把对象$Person的内容复制给$Person1,可以使用克隆,如$Person1=clone $Person
PHP面向对象之对象和引用的更多相关文章
- Python 对象的引用计数和拷贝
Python 对象的引用计数和拷贝 Python是一种面向对象的语言,包括变量.函数.类.模块等等一切皆对象. 在python中,每个对象有以下三个属性: 1.id,每个对象都有一个唯一的身份标识自己 ...
- Python基础一. 简介、变量、对象及引用
一.Python简介 Python是一门计算机编程语言,它是由荷兰人Guido van Rossum在1989年圣诞节期间为了打发无聊的圣诞节而编写的,作为ABC语言的继承 特性: 面向对象.解释型. ...
- python学习笔记4(对象/引用;多范式; 上下文管理器)
### Python的强大很大一部分原因在于,它提供有很多已经写好的,可以现成用的对象 21. 动态类型:对象/引用 对象和引用: 对象是储存在内存中的实体,对象名只是指向这一对象的引用(refere ...
- java定义类 对象,引用,指针
java是根据面向对象编程,因此有类和对象的概念,类分为普通类与抽象类. 一.定义类 类由N个 构造器 成员变量 方法组成,可以不定义,也可以根据语法定义N个. [修饰符] class 类名{ 构 ...
- PHP面向对象编程 对象的基本概念 PHP面向对象的基本实践 PHP面向对象的高级实践 PHP面向对象的特殊实践
再次梳理一下面向对象编程的要点. 此文是以php为例,但思想是通用的. 总结的PHP面向对象编程笔记 对象的基本概念 对象的基本构成 对象包含两部分 一.对象的组成元素 是对象的数据模型,用于描述对象 ...
- Java中的对象和引用
<Java编程思想>中有一段关于对象的说法: "按照通俗的说法,每个对象都是某个类(class)的一个实例(instance),这里,'类'就是'类型'的同义词." 简 ...
- Java中对象与引用
初学Java 时.在非常长一段时间里,总认为基本概念非常模糊. 后来才知道.在很多Java 书中.把对象和对象的引用混为一谈. 假设分不清对象与对象引用,那实在没法非常好地理解以下的面向对象技术.把自 ...
- 转发:Java对象及其引用
原文: http://zwmf.iteye.com/blog/1738574 Java对象及其引用 关于对象与引用之间的一些基本概念. 初学Java时,在很长一段时间里,总觉得基本概念很模糊.后来才知 ...
- 浅谈Java中的对象和引用
浅谈Java中的对象和对象引用 在Java中,有一组名词经常一起出现,它们就是“对象和对象引用”,很多朋友在初学Java的时候可能经常会混淆这2个概念,觉得它们是一回事,事实上则不然.今天我们就来一起 ...
随机推荐
- WinRAR 5.01 正式版 (简体中文)附注册机及注册码
软件分类:数据压缩软件大小:1.91 MB 软件类别:国外软件 软件授权:注册版软件语言:简体中文点击进入:官方主页 应用平台:Win 8.Win 7.Win 2008 R2.Win 2008.Wi ...
- Android无线测试之—UiAutomator UiSelector API介绍之四
四种匹配关系介绍 一.四种匹配关系介绍: 二.举例: 匹配字符串 0123456789 1.完全匹配: 0123456789 2.包含匹配: 45678.456.678 3.正则匹配: \d{10 ...
- python多线程/多进程
thread和threading的区别 threading相对与thread是更高级别的线程管理模块 thread和threading模块中的一些属性会有冲突 thread模块拥有的同步原因实际上只有 ...
- Sublime Text 3如何快速生成HTML5的头部信息和常用的快捷键
一.快速生成HTML5的头部信息的步骤: 1.Ctrl + N,新建一个文档: 2.Ctrl + Shift + P,打开命令模式,再输入 sshtml 进行模糊匹配,将语法切换到html模式: 3. ...
- 如何将大数据保存到 MySql 数据库
1. 什么是大数据 1. 所谓大数据, 就是大的字节数据,或大的字符数据. 2. 标准 SQL 中提供了如下类型来保存大数据类型: 字节数据类型: tinyblob(256B), blob(64K), ...
- hbase中清空整张表的数据
hbase(main):005:0> truncate 'fr:test' Truncating 'FaceBase' table (it may take a while): - Disabl ...
- NodeJS的一些总结
NodeJS的一些总结 Node 公开宣称的目标是 “旨在提供一种简单的构建可伸缩网络程序的方法”. 当前的服务器程序有什么问题?我们来做个数学题. 在 Java™ 和 PHP 这类语言中,每个连接都 ...
- opencv3计算机视觉+Python(一)
基本I/O脚本 读/写图像文件 OpenCV的imread函数和imwrite函数能支持各种静态图像文件格式.不同系统支持的文件格式不一样,但都支持BMP格式,通常还应该支持PNG.JPEG和TIFF ...
- Sql多条件排序
多条件排序可以通过在order by语句后面使用case when then条件语句来实现. end 例子: 1.创建表case_test 共有id,case_type,case_location,c ...
- sublime使用心得
1.ctrl + shift +p 命令面板 ---> toggle_side_bar 2.ctrl + shift +p 命令面板 --->reindent lines 3.ctrl + ...