PHP5 的对象赋值机制介绍


Posted in PHP onAugust 02, 2011
<?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 相关文章推荐
PHP求最大子序列和的算法实现
Jun 24 PHP
php中获取远程客户端的真实ip地址的方法
Aug 03 PHP
PHP 文件系统详解
Sep 13 PHP
解析百度搜索结果link?url=参数分析 (全)
Oct 09 PHP
PHP获取表单所有复选框的值的方法
Aug 28 PHP
php使用标签替换的方式生成静态页面
May 21 PHP
thinkPHP3.2简单实现文件上传的方法
May 16 PHP
PHP7基于curl实现的上传图片功能
May 11 PHP
thinkPHP5框架auth权限控制类与用法示例
Jun 12 PHP
PHP PDOStatement::nextRowset讲解
Feb 01 PHP
php数组遍历类与用法示例
May 24 PHP
php多进程中的阻塞与非阻塞操作实例分析
Mar 04 PHP
利用PHP实现智能文件类型检测的实现代码
Aug 02 #PHP
10条PHP高级技巧[修正版]
Aug 02 #PHP
PHP获取url的函数代码
Aug 02 #PHP
给初学者的30条PHP最佳实践(荒野无灯)
Aug 02 #PHP
使用ThinkPHP自带的Http类下载远程图片到本地的实现代码
Aug 02 #PHP
linux下使用ThinkPHP需要注意大小写导致的问题
Aug 02 #PHP
理解和运用PHP中的多态性[译]
Aug 02 #PHP
You might like
php session处理的定制
2009/03/16 PHP
PHP添加Xdebug扩展的方法
2014/02/12 PHP
php中使用url传递数组的方法
2015/02/11 PHP
php使用explode()函数将字符串拆分成数组的方法
2015/02/17 PHP
手把手编写PHP框架 深入了解MVC运行流程
2016/09/19 PHP
js跑步算法的实现代码
2013/12/04 Javascript
js的alert样式如何更改如背景颜色
2014/01/22 Javascript
Express.JS使用详解
2014/07/17 Javascript
一个不错的字符串转码解码函数(自写)
2014/07/31 Javascript
js选项卡的实现方法
2015/02/09 Javascript
angularJS 入门基础
2015/02/09 Javascript
实例讲解javascript注册事件处理函数
2016/01/09 Javascript
JS查找字符串中出现最多的字符及个数统计
2017/02/04 Javascript
react性能优化达到最大化的方法 immutable.js使用的必要性
2017/03/09 Javascript
jQuery选取所有复选框被选中的值并用Ajax异步提交数据的实例
2017/08/04 jQuery
vue使用ajax获取后台数据进行显示的示例
2018/08/09 Javascript
nodejs如何在package.json中设置多条启动命令
2020/03/16 NodeJs
mapboxgl区划标签避让不遮盖实现的代码详解
2020/07/01 Javascript
[09:23]国际邀请赛采访专栏:iG战队VK,Tongfu战队Cu
2013/08/05 DOTA
[01:36:19]Secret vs NB 2018国际邀请赛小组赛BO2 第一场 8.19
2018/08/21 DOTA
[04:03][TI9趣味短片] 小鸽子茶话会
2019/08/20 DOTA
numpy.transpose对三维数组的转置方法
2018/04/17 Python
Python利用WMI实现ping命令的例子
2019/08/14 Python
Python实现哲学家就餐问题实例代码
2020/11/09 Python
Html5 Canvas 实现一个“刮刮乐”游戏
2019/09/05 HTML / CSS
如何转换一个字符串到enum值
2014/04/12 面试题
中软国际Java程序员机试题
2012/08/19 面试题
高中毕业生自我鉴定
2013/11/03 职场文书
餐饮业创业计划书范文
2014/01/06 职场文书
市级绿色学校申报材料
2014/08/25 职场文书
环境卫生工作汇报材料
2014/10/28 职场文书
2014年房地产销售工作总结
2014/12/01 职场文书
商务代表岗位职责
2015/02/15 职场文书
【HBU】数据库第四周 单表查询
2021/04/05 SQL Server
详解用Python把PDF转为Word方法总结
2021/04/27 Python
winserver2019安装软件一直卡在应用程序正在为首次使用做准备
2022/06/10 Servers