PHP5 的对象赋值机制介绍

yipeiwu_com6年前PHP代码库
复制代码 代码如下:

<?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实现中文字符截取防乱码方法汇总

大家在自己的程序中相信都会经常用到截取字符串吧,但是往往遇到截取中文字符串的时候会遇到乱码的问题。很是让人头疼,接下来介绍两种方法防止截取中文字符串的时候出现乱码的问题。 首先第一种,自...

在html文件中也可以执行php语句的方法

在apache的conf目录中修改文件httpd.conf。 搜索AddType application/ 找到前面没有#的那条,在下面添加AddType application/x-h...

php中fgetcsv()函数用法实例

本文实例讲述了php中fgetcsv()函数用法。分享给大家供大家参考。具体方法如下: fgetcsv是一个简单的生成excel文档的函数,从 PHP 4.3.5 起,fgetcsv()...

浅谈PHP的排列组合(如输入a,b,c 输出他们的全部组合)

实例如下: <?php /*分治法——直接选择 比如说a b c 首先将a之后的字符依次与a进行交换 1 b,a,c 2 c,b,a 注意这里少了一个原始数据 a,b,...

PHP 反射(Reflection)使用实例

PHP Reflection是用于获取类、扩展、方法、函数、对象、参数、属性的详细信息。 ReflectionClass类获取类相关信息,如获取属性、方法、文档注释等。 <&#...