現在我們知道了如何訪問物件中的成員,是通過」物件->成員」的方式訪問的,這是在物件的外部去訪問物件中成員的形式, 那麼如果我想在物件的內部,讓物件裡的方法訪問本物件的屬性, 或是物件中的方法去呼叫本物件的其它方法這時我們怎麼辦?因為物件裡面的所有的成員都要用物件來呼叫,包括物件的內部成員之間的呼叫,所以在php裡面給 我提供了乙個本物件的引用$this, 每個物件裡面都有乙個物件的引用$this來代表這個物件,完成物件內部成員的呼叫, this的本意就是「這個」的意思, 上面的例項裡面,我們例項化三個例項物件$p1、 $p2、 $p3,這三個物件裡面各自存在乙個$this分別代表物件$p1、$p2、$p3 。
通過上圖我們可以看到,$this就是物件內部代表這個物件的引用,在物件內部和呼叫本物件的成員和物件外部呼叫物件的成員所使用的方式是一樣的。
$this->屬性: $this->name; $this->age; $this->***;
$this->方法 :$this->say(); $this->run();
修改一下上面的例項,讓每個人都說出自己的名字,性別和年齡:
01
<?php
02
class
person
03
14
15
function
run()
// 這個人可以走路的方法
16
19
}
20
21
$p1
=
new
person();
// 建立例項物件$p1
22
$p2
=
new
person();
// 建立例項物件$p2
23
$p3
=
new
person();
// 建立例項物件$p3
24
25
// 下面三行是給$p1物件屬性賦值
26
$p1
->name =
"張三"
;
27
$p1
->*** =
"男"
;
28
$p1
->age = 20;
29
30
// 下面訪問$p1物件中的說話方法
31
$p1
->say();
32
33
// 下面三行是給$p2物件屬性賦值
34
$p2
->name =
"李四"
;
35
$p2
->*** =
"女"
;
36
$p2
->age = 30;
37
38
// 下面訪問$p2物件中的說話方法
39
$p2
->say();
40
41
// 下面三行是給$p3物件屬性賦值
42
$p3
->name =
"王五"
;
43
$p3
->*** =
"男"
;
44
$p3
->age = 40;
45
46
// 下面訪問$p3物件中的說話方法
47
$p3
->say();
48
?>
輸出結果為:
我的名子叫:張三 性別:男 我的年齡是:20我的名子叫:李四 性別:女 我的年齡是:30我的名子叫:王五 性別:男 我的年齡是:40分析一下這個方法:
1
function
say()
// 這個人可以說話的方法
2
在$p1、$p2和$p3這三個物件中都有say()這個方法,$this分別代表這三個物件, 呼叫相應的屬性,列印出屬性的值,這就是在物件內部訪問物件屬性的方式, 如果相在say()這個方裡呼叫run()這個方法也是可以的,在say()這個方法中使用$this->run()的方式來完成呼叫。
C string 特殊的引用型別
net 框架程式設計 修訂版 中有這樣一段描述 string型別直接繼承自object,這使得它成為乙個引用型別,也就是說執行緒上的堆疊上不會駐留有任何字串。譯註 注意這裡的 直接繼承 直接繼承自object的型別一定是引用型別,因為所有的值型別都繼承自system.valuetype。值得指出的是...
特殊的「別名」 引用 詳解
引用專題 變數名回顧 變數名實質上是一段連續儲存空間的別名,是乙個標號 門牌號 程式中通過變數來申請並命名記憶體空間 通過變數的名字可以使用儲存空間 問題 1 對一段連續的記憶體空間只能取乙個別名嗎?a 在c 中新增加了引用的概念 b 引用可以看作乙個 已定義變數 的別名 c 引用的語法 type ...
C 特殊的「別名」引用
1 在c 中新增加了引用的概念 2 引用可以看作乙個已定義變數的別名 3 引用的語法 type name var 4 引用做函式引數那?引用作為函式引數宣告時不進行初始化 例項 include include intmain void 屬於c 編譯器對c的擴充套件。例項 問題 c中可以編譯通過嗎?i...