現在我們知道了如何訪問對象中的成員,是通過”對象->成員”的方式訪問的,這是在對象的外部去訪問對象中成員的形式, 那么如果我想在對象的內部,讓對象里的方法訪問本對象的屬性, 或是對象中的方法去調用本對象的其它方法這時我們怎么辦?因為對象里面的所有的成員都要用對象來調用,包括對象的內部成員之間的調用,所以在PHP里面給 我提供了一個本對象的引用$this, 每個對象里面都有一個對象的引用$this來代表這個對象,完成對象內部成員的調用, this的本意就是“這個”的意思, 上面的實例里面,我們實例化三個實例對象$P1、 $P2、 $P3,這三個對象里面各自存在一個$this分別代表對象$p1、$p2、$p3 。
PHP面向對象(OOP)編程完全教程:7.特殊的引用“$this“的使用
通過上圖我們可以看到,$this就是對象內部代表這個對象的引用,在對象內部和調用本對象的成員和對象外部調用對象的成員所使用的方式是一樣的。
~~~
$this->屬性: $this->name; $this->age; $this->sex;
$this->方法 :$this->say(); $this->run();
~~~
修改一下上面的實例,讓每個人都說出自己的名字,性別和年齡:
~~~
1 <?php
2 class Person
3 {
4 //下面是人的成員屬性
5 var $name; //人的名子
6 var $sex; //人的性別
7 var $age; //人的年齡
8
9 //下面是人的成員方法
10 function say() { //這個人可以說話的方法
11 echo "我的名子叫:" . $this->name . " 性別:" . $this->sex . " 我的年齡是:" . $this->age;
12 }
13
14 function run() { //這個人可以走路的方法
15 echo "這個人在走路";
16 }
17 }
18
19 $p1 = new Person(); //創建實例對象$p1
20 $p2 = new Person(); //創建實例對象$p2
21 $p3 = new Person(); //創建實例對象$p3
22
23 //下面三行是給$p1對象屬性賦值
24 $p1->name = "張三";
25 $p1->sex = "男";
26 $p1->age = 20;
27
28 //下面訪問$p1對象中的說話方法
29 $p1->say();
30
31 //下面三行是給$p2對象屬性賦值
32 $p2->name = "李四";
33 $p2->sex = "女";
34 $p2->age = 30;
35
36 //下面訪問$p2對象中的說話方法
37 $p2->say();
38
39 //下面三行是給$p3對象屬性賦值
40 $p3->name = "王五";
41 $p3->sex = "男";
42 $p3->age = 40;
43
44 //下面訪問$p3對象中的說話方法
45 $p3->say();
46 ?>
~~~
輸出結果為:
我的名子叫:張三 性別:男 我的年齡是:20我的名子叫:李四 性別:女 我的年齡是:30我的名子叫:王五 性別:男 我的年齡是:40
分析一下這個方法:
~~~
1 function say() { //這個人可以說話的方法
2 echo "我的名子叫:" . $this->name . " 性別:" . $this->sex . " 我的年齡是:" . $this->age;
3 }
~~~
在$p1、$p2和$p3這三個對象中都有say()這個方法,$this分別代表這三個對象, 調用相應的屬性,打印出屬性的值,這就是在對象內部訪問對象屬性的方式, 如果相在say()這個方里調用run()這個方法也是可以的,在say()這個方法中使用$this->run()的方式來完成調用。
- 1.什么是面向對象
- 2.什么是類,什么是對象,類和對象這間的關系
- 3.什么是面向對象編程呢
- 4.如何抽象出一個類
- 5.如何實例化對象
- 6.如何去使用對象中的成員
- 7.特殊的引用this的使用
- 8.構造方法__construct()與析構方法__destruct()
- 9.封裝性(var與public,protected,private的關系)
- 10.__set(),__get(),__isset(),__unset()四個方法的應用
- 11.類的繼承
- 12.重載新的方法(parent::)
- 13.訪問類型(public,protected,private)
- 14.final關鍵字的應用
- 15.static和const關鍵字的使用(self::)
- 16.__toString()方法
- 17.克隆對象__clone()方法
- 18.__call()處理調用錯誤
- 19.抽象方法和抽象類(abstract)
- 20.PHP5接口技術(interface)
- 21.多態的應用
- 22.把對象串行化serialize()方法,__sleep()方法,__wakeup()方法
- 23.自動加載類 __autoload()函數