php中物件是引用型別嗎?
這貌似是一個極其簡單的問題,還用得著專門寫一篇博文?各位看官,最初我也這麼認為,但這的確矇蔽了你那水靈靈的小眼睛,不妨看看什麼是引用?
$a = 10;
$b = &$a;
$b = 20;
var_dump($a,$b);
在這段極其簡單的程式碼中,$b是$a的引用,也即是別名,修改$b,$a會變,反之亦然。這就是所謂的引用,那物件是不是也是這樣的呢?
class A
{
public $num = 10;
}
$a = new A();
$a->num = 20;
function demo($b)
{
$b[0] = 5;
var_dump($b);
}
demo($a)
var_dump($a);
你會發現兩次輸出一樣,那這是不是說明物件做函式引數時是引用傳參呢?在這一點上不得不說千鋒的學生的確是勤學好問,我剛開始以為是引用傳參,但同學提出如果你把demo裡修改為:
function demo($b)
{
$b = new A();
var_dump($b);
}
兩次輸出並不一樣!這是為什麼呢?如果從C語言角度講,PHP裡的任何變數,包括物件都是指標,物件做引數相當於二重指標,所以當$b指向一個全新的物件後,並不影響$obj,所以物件做函式引數並不是引用傳參!又這麼一幫勤學好問的學生,整個水準都不一樣了。
網際網路+時代,時刻要保持學習,攜手千鋒PHP,Dream It Possible。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/2144/viewspace-2803395/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 時間物件、引用型別物件型別
- C# 物件比較(值型別、引用型別)C#物件型別
- PHP中物件的引用傳遞PHP物件
- 面試官:Java物件引用都有哪些型別?面試Java物件型別
- 《JavaScript物件導向精要》之一:基本型別和引用型別JavaScript物件型別
- JavaScript 基礎 (二) - 引用資料型別 (物件)JavaScript資料型別物件
- 【JavaScript】Function型別是物件JavaScriptFunction型別物件
- 引用型別型別
- Swift 中的值型別與引用型別使用指北Swift型別
- JavaScript中的Object的引用型別JavaScriptObject型別
- Java中的四種引用型別Java型別
- 值型別和引用型別型別
- JavaScript引用型別-Object型別JavaScript型別Object
- 值型別與引用型別型別
- JAVA中基本資料型別和引用資料型別Java資料型別
- PHP物件導向之&引用PHP物件
- js引用型別JS型別
- javascript:引用型別JavaScript型別
- 物件與物件引用的區別物件
- JavaScript值型別和引用型別JavaScript型別
- c#:值型別&引用型別C#型別
- ECMAScript 原始型別與引用型別型別
- Swift值型別和引用型別Swift型別
- golang中 值型別,指標,引用的區別Golang型別指標
- Java中的基本資料型別與引用資料型別Java資料型別
- JavaScript 值型別和引用型別在堆疊中的存放JavaScript型別
- GC判定與回收演算法+java物件引用型別GC演算法Java物件型別
- PHP物件的引用及物件優化策略PHP物件優化
- JavaScript筆記5:計時器、物件、基本資料型別、引用資料型別JavaScript筆記物件資料型別
- js基本型別和引用型別區別JS型別
- 值型別與引用型別的區別型別
- JAVA 基本型別與 引用型別區別Java型別
- javascript基本型別 引用型別 基本包裝型別JavaScript型別
- C#的型別——值型別與引用型別C#型別
- JavaScript - 基本型別與引用型別值JavaScript型別
- Java的基本型別和引用型別Java型別
- 靜態型別在 JavaScript 中是一種負擔嗎?型別JavaScript
- Go 的引用型別Go型別