PHP5 的对象赋值机制介绍

看到PHP设计模式中值对象模式中的例题,对于结果总感到有点疑惑。回头看了下PHP5的对象赋值才真正清楚。

复制代码 代码如下:

<?php class SimpleClass{ public $var = 'a default value'; public function displayVar() { echo $this->var; } } $instance = new SimpleClass(); $assigned = $instance; $reference =& $instance; $instance->var = '$assigned will have this value'; $instance = null; // $instance and $reference become null var_dump($instance);var_dump($reference);var_dump($assigned); var_dump($instance); var_dump($assigned); var_dump($reference); ?>

php5 改写了OOP底层。当类生成一个实例(对象)的时候,返回值$instance并不是对象本身,而只是对象的一个id(或者资源句柄),所以, 当$instance被赋值给$assigned的时候,$assigned也指向了这个对象,这有点像普通变量的引用(&)操作。所以,当 对$instance初始化的时候,$assigned也被初始化了。但是,当$instance被销毁(=null)的时候,因为对应的对象还有一个句 柄存在($assigned),所以对象并不会被销毁,析构函数也不会被触发。结果,var_dump($assigned)是对象的值, 而$instance已经是空句柄,显示null。$reference因为与$instance有类似普通变量间的引用关系,所以也成为空句柄,显示 null。

原文发布于微信公众号 - php(phpdaily)

原文发表时间:2015-05-06

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏张善友的专栏

jQuery操作Select

jQuery是如何控制和操作select的。先看下面的html代码 <select id="test"> <option value="1">选项一<optio...

1977
来自专栏对角另一面

读Zepto源码之Event模块

Event 模块是 Zepto 必备的模块之一,由于对 Event Api 不太熟,Event 对象也比较复杂,所以乍一看 Event 模块的源码,有点懵,细看...

2220
来自专栏Android先生

Android开发人员不得不学习的JavaScript基础(二)

window对象是BOM的核心,window对象指当前的浏览器窗口,window对象中有很多种方法供开发者调用:

853
来自专栏向治洪

android EventBus 3.0使用指南

Enventbus的作用和好处我就不多说了,这里介绍下怎么使用。 2.+版本的使用方法 public void onEvent(MessageEvent eve...

1695
来自专栏Nian糕的私人厨房

JavaScript 实现 Tab 点击切换

Tab 选项卡切换效果在现如今的网页中,运用的也是比较多的,包括点击切换、滑动切换、延迟切换、自动切换等多种效果,在这篇博文里,我们是通过原生 JavaScri...

522
来自专栏GreenLeaves

JavaScript之ClassName属性学习

     在前面的style属性学习中,知道了通过style属性可以控制元素的样式,从而实现了行为层通过DOM的style属性去干预变现层显示的目地,但是这种就...

1829
来自专栏HTML5学堂

JS设置标签的内容和样式

上一期堡堡给大家分享了操作符与数据类型转换。掌握JS操作符的目的是为了能够灵活的操作变量,以便完成JS的各种逻辑处理;掌握数据类型转换可以让我们避免一些不该发生...

3309
来自专栏desperate633

LintCode 排颜色 II题目分析代码

给定一个有n个对象(包括k种不同的颜色,并按照1到k进行编号)的数组,将对象进行分类使相同颜色的对象相邻,并按照1,2,...k的顺序进行排序。

752
来自专栏拭心的安卓进阶之路

Java 基础巩固:再谈抽象类和接口

文章出自:安卓进阶学习指南 主要贡献者: Milo Struggle shixinzhang 背景介绍 ? 大家好,这篇文章是 《安卓进阶技能树计划》 的...

18810
来自专栏xingoo, 一个梦想做发明家的程序员

Log4j官方文档翻译(七、日志格式化)

apache log4j提供各种layout对象,然后根据自己指定的layouts对象转化日志信息。通常来说都是应用量身定制layout对象转换信息格式。 所有...

1885

扫码关注云+社区