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 相关文章推荐
手把手教你使用DedeCms V3的在线采集图文教程
Apr 03 PHP
php面向对象全攻略 (四)构造方法与析构方法
Sep 30 PHP
ThinkPHP之foreach标签使用概述
Jun 30 PHP
Codeigniter中mkdir创建目录遇到权限问题和解决方法
Jul 25 PHP
php中的mongodb select常用操作代码示例
Sep 06 PHP
php实现的替换敏感字符串类实例
Sep 22 PHP
PHP上传文件时自动分配路径的方法
Jan 09 PHP
ucenter通信原理分析
Jan 09 PHP
yii2中使用Active Record模式的方法
Jan 09 PHP
laravel5.4利用163邮箱发送邮件的步骤详解
Sep 22 PHP
php设计模式之工厂模式用法经典实例分析
Sep 20 PHP
PHP全局使用Laravel辅助函数dd
Dec 26 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下载远程文件类(支持断点续传)
2008/11/14 PHP
PHP递归调用的小技巧讲解
2013/02/19 PHP
解析在apache里面给php写虚拟目录的详细方法
2013/06/24 PHP
ThinkPHP采用原生query实现关联查询left join实例
2014/12/02 PHP
值得分享的php+ajax实时聊天室
2016/07/20 PHP
PHP autoload使用方法及步骤详解
2020/09/05 PHP
一些实用的jQuery代码片段收集
2011/07/12 Javascript
网页编辑器ckeditor和ckfinder配置步骤分享
2012/05/24 Javascript
js动态生成指定行数的表格
2013/07/11 Javascript
可自定义速度的js图片无缝滚动示例分享
2014/01/20 Javascript
JavaScript操作Oracle数据库示例
2015/03/06 Javascript
jQuery简单几行代码实现tab切换
2015/03/10 Javascript
jQuery Validate插件实现表单验证
2016/08/19 Javascript
bootstrap——bootstrapTable实现隐藏列的示例
2017/01/14 Javascript
Angular 4依赖注入学习教程之FactoryProvider配置依赖对象(五)
2017/06/04 Javascript
BootStrap 标题设置跨行无效的解决方法
2017/10/25 Javascript
vue keep-alive请求数据的方法示例
2018/05/16 Javascript
Vue 让元素抖动/摆动起来的实现代码
2018/05/31 Javascript
详解使用create-react-app添加css modules、sasss和antd
2018/07/31 Javascript
js单线程的本质 Event Loop解析
2019/10/29 Javascript
在Vue项目中使用Typescript的实现
2019/12/19 Javascript
bootstrap-table后端分页功能完整实例
2020/06/01 Javascript
[02:02]2018DOTA2亚洲邀请赛Mineski赛前采访
2018/04/04 DOTA
在Python中使用全局日志时需要注意的问题
2015/05/06 Python
python如何在循环引用中管理内存
2018/03/20 Python
Python爬虫动态ip代理防止被封的方法
2019/07/07 Python
python 如何将数据写入本地txt文本文件的实现方法
2019/09/11 Python
基于Python实现船舶的MMSI的获取(推荐)
2019/10/21 Python
解决安装pyqt5之后无法打开spyder的问题
2019/12/13 Python
Pycharm中Python环境配置常见问题解析
2020/01/16 Python
html5-canvas中使用clip抠出一个区域的示例代码
2018/05/25 HTML / CSS
Python中pass语句的作用是什么
2016/06/01 面试题
大学学年自我鉴定
2013/10/28 职场文书
2015年秋季小学开学典礼主持词
2015/07/16 职场文书
2019最新公司租房合同(例文)
2019/07/18 职场文书
Python进度条的使用
2021/05/17 Python