PHP物件的生成(建立)使用 傳值方式
工具/原料
PHP物件的生成(建立)使用 傳值方式
物件的生成(建立)
從一個類,new出一個物件來,則有這樣的一個說法:
1, 該物件“屬於”該類。
2, 也可以說成:生成了一個物件,建立了一個物件,例項(instance)化出了一個物件
3, 也可以說:該物件是該類的一個“例項”——往往,物件和例項是表達同一個概念。
可以有如下一些方式來生成一個物件(假設類為Dog):
$d1 = new Dog();
$d2 = new self(); //self只能用在類的內部,代表該類本身,後續詳細展開;
$d3 = new $d1(); //通過一個現有物件,也可以例項化出該物件所屬類的一個物件;
物件的使用
基本上,使用物件就是使用物件的屬性和方法而已,比如:
$obj->屬性1 = 值1; //賦值
echo $obj->屬性2; //取得屬性2的值並輸出
$v3 = $obj->屬性3 * 4 + 5; //取得屬性3的值並進行一些計算
$obj->方法1(.....);
通常不能“獨立”使用,比如:
echo $obj; //不可以,假設obj是一個物件
$v4 = $obj * 5 + 6; //也不可以
但可以var_dump()檢視物件的詳細資訊:
var_dump($obj);
物件的傳值方式
其實,也同樣是2種:值傳遞,引用傳遞——跟變數一樣。
比如,普通變數:
$v1 = 1;
$v2 = $v1; //值傳遞;
$v1 = 11;
echo $v2 ; //輸出1
$v3 = & $v1; //引用傳遞;
$v1 = 111;
echo $v3; //輸出111;
但,雖然物件傳值方式,本質上也是這樣,但物件因為其資料的“複雜性”,會有所不同:
物件的儲存方式,跟普通變數不同,如下所示:
普通變數:
可見:
普通變數:變數名和變數資料之間是“直接關係”,用變數就是用該資料;
而:
物件變數:變數名和變數資料之間,還有一個物件編號,該變數是系統內部按當前網頁物件生成的順序給定的,我們無法修改該編號。對比變數直接操作的是該物件編號。該編號自動指向物件資料;
則物件值傳遞時,其原理圖為:
$a1 = new A();
$a2 = $a1; //值傳遞:
將$a1的值改為123之後,其效果類似這樣:
則物件進行“引用傳遞”時,其原理圖為:
$b1 = new A();
$b2 = & $b1; //引用傳遞:
將$b1的值改為123之後,其效果類似這樣: