PHP5 的對象賦值機制介紹
更新時間:2011年08月02日 22:10:42 作者:
看到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),所以對象并不會被銷毀,析構函數(shù)也不會被觸發(fā)。結果,var_dump($assigned)是對象的值,而$instance已經(jīng)是空句柄,顯示null。$reference因為與$instance有類似普通變量間的引用關系,所以也成為空句柄,顯示 null。
相關文章
PHP去除數(shù)組中重復的元素并按鍵名排序函數(shù)
用php實現(xiàn)的去除數(shù)組中重復的函數(shù)2008-08-08PHP生成器(generator)和協(xié)程的實現(xiàn)方法詳解
這篇文章主要介紹了PHP生成器(generator)和協(xié)程的實現(xiàn)方法,結合實例形式詳細分析了php生成器以及由此延伸出來的協(xié)程相關操作技巧與注意事項,需要的朋友可以參考下2018-07-07PHP實現(xiàn)導出excel數(shù)據(jù)的類庫用法示例
這篇文章主要介紹了PHP實現(xiàn)導出excel數(shù)據(jù)的類庫用法,結合實例形式分析了php操作Excel數(shù)據(jù)的讀取與導出操作相關實現(xiàn)技巧,需要的朋友可以參考下2016-10-10PHP中register_globals參數(shù)為OFF和ON的區(qū)別(register_globals 使用詳解)
register_globals是php.ini里的一個配置,這個配置影響到php如何接收傳遞過來的參數(shù),如果你的問題是:為什么我的表單無法傳遞數(shù)據(jù)?為什么我的程序無法得到傳遞過來的變量?等等,那么你需要仔細的閱讀以下的內(nèi)容2012-02-02php判斷某個方法是否存在函數(shù)function_exists (),method_exists()與is_callabl
這篇文章主要介紹了php判斷某個方法是否存在函數(shù)function_exists (),method_exists()與is_callable()區(qū)別與用法,結合實例形式分析了php function_exists (),method_exists()與is_callable()基本功能、用法、區(qū)別與操作注意事項,需要的朋友可以參考下2020-04-04