這篇與上一篇隔的時間有點長啊,並且中間還插入了一個小項目。不過沒關係,《邊記邊學PHP》還會一直進行去。
PHP物件導向程式設計
(2)類別屬性
所謂類別屬性,就是在類別中宣告的變數。它與在類別外宣告的變數的差別就是前面加上了修飾權限,也就是上一篇的public/private/protected。例如我要聲明一個學生類,裡麵包含學生的學號,姓名,性別,年齡,班級等。那我可以如下聲明:
<?php class Student{ private $sid; private $name; private $gender; private $age; private $grade; public getSid(){ return $this->sid; } public getName(){ return $this->name; } public getGender(){ return $this->gender; } public getAge(){ return $this->age; } public getGrade(){ return $this->grade; } public setSid($sid){ $this->sid = $sid; } public setName($name){ $this->name = $name; } public setGender($gender){ $this->gender = $gender; } public setAge($age){ $this->age = $age; } public setGrade($grade){ $this->grade = $grade; } }
在聲明屬性的同時,也可以像類外變數一樣,宣告的同時賦值。
這裡注意:
屬性可以儲存一個值,一個數組,甚至是另一個類別的物件。例如上面的學生類別中給他加上學校屬性,這個學校也是一個類,包括學校的名字,地址等。我先聲明學校類別
class School{ private $name; private $address; public getName(){ return $this->name; } public getAddress(){ return $this->address; } public setName($name){ $this->name = $name; } public setAddress($address){ $this->address = $address; } }
<?php class Student{ ... private $school; ... public getSchool(){ return $this->school; } ... public setSchool($school){ $this->school = $school; } }
<span style="white-space:pre"> </span>$school1 = new School(); <span style="white-space:pre"> </span>$school1->setName("大连理工大学"); <span style="white-space:pre"> </span>$school1->setAddress("大连"); <span style="white-space:pre"> </span>$stu1 = new Student(); <span style="white-space:pre"> </span>$stu1->setSchool($school1);
我先聲明一個學校:
<span style="white-space:pre"> </span>$stu1->getSchool()->getName();
我先聲明一個學校:
<span style="white-space:pre"> </span>public static $graduate;
這樣在訪問它的學校的時候就是一個對象了,如果我想知道這個學生所在的名稱,我所在的學校名稱,我的學校就知道這個學生要這樣訪問:
class Phone{ const IPHONE = 1; const ZTE = 2; const HUAWEI = 3; //这里面各种属性 }
使用getSchool方法得到的是一個School對象,那麼在使用School物件中的getName方法存取它的名字。 這裡在類別裡面存取變數的時候,使用了$this這個關鍵字,那麼接下來就說一下this關鍵字。
(3)$this關鍵字不管是聲明成公有還是私有還是保護的成員變量,在類裡面訪問自己的變量一定會有的,那麼就要用到$this字。 $this關鍵字在我看來就是指類自己本身,我也可以理解成自己把自己當成了一個物件去呼叫自己的屬性。這裡要注意,在宣告變數的時候我們使用了$符號,但是如果使用$this存取的時候,只有this加$符號,後面的屬性就不要加了,如果加上會報錯。具體用法還是參照上面的代碼。當然如果是外面宣告的物件呼叫的時候跟$this一樣,物件要加$符號,後面不加。
(4)靜態屬性
對於靜態屬性我沒有想到怎麼去解釋它,不過我看到書上這句話說得很好:靜態屬性常用來表示一個與某個特定特定類別有關而與實例物件無關的持續值。我們可以把靜態屬性看成是累得全域變數。靜態屬性的一個重要特性是,在存取靜態屬性時不需要建立類別的實例,也就是不需要定義類別的物件。
🎜🎜🎜在書上舉了一個車類裡面的銷售數量的靜態屬性,也就是說不管是誰買的車,反正是賣了,那麼我的銷售數量就要加1。但我上面已經舉了學生與學校的例子,我就再接著我的例子說,我想到了一個學校畢業生的這個屬性,也就是說不管你是誰,只要從我的學校畢業了,那麼我的學校畢業生的人數就會多1。那我可以這麼聲明:🎜🎜🎜rrreee🎜🎜🎜也就是在變數的前面加上static這個關鍵字。那我在訪問這個靜態屬性的時候就不要使用物件去訪問了,直接使用這個類別去訪問,School::$graduate = ...;就可以了。這也就是上面說的不需要定義類別的物件可以去存取。這裡我可以用張圖來說明靜態屬性與普通屬性的差別:🎜🎜静态属性只占这个内存,不管存不存在对象实例,除非这个类没了,否则会一直占有自己的内存。而普通的属性在每次声明对象的时候都会分配内存。
静态属性一般声明成公有的。
(6)类常量
与类外的普通常量一样,类常量也是存储一个固定的值。使用const关键字进行声明,这里不需要加权限修饰。在访问的时候跟访问静态属性一样需要使用类名::(双冒号)加常量名来访问。比如如果我声明一个手机类,手机有各种型号,那么我可以把各个手机型号用常量来存储,在给手机型号属性赋值的时候使用这些常量来赋值就好了。但是可能有这种疑惑,为什么要使用常量,我直接声明不就行了。那么可以这样理解:
class Phone{ const IPHONE = 1; const ZTE = 2; const HUAWEI = 3; //这里面各种属性 }
这是我理解的常量的优点。但是我没怎么用过。
下一篇继续面向对象。
以上就介绍了边记边学PHP-(十二)面向对象编程2,包括了方面的内容,希望对PHP教程有兴趣的朋友有所帮助。