首頁 後端開發 php教程 邊記邊學PHP-(十二)物件導向程式設計2

邊記邊學PHP-(十二)物件導向程式設計2

Aug 08, 2016 am 09:32 AM
gt public quot school this

這篇與上一篇隔的時間有點長啊,並且中間還插入了一個小項目。不過沒關係,《邊記邊學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;
	}

}
登入後複製

在上面的學生類中,我聲明了五個屬性,全部聲明成了private私有型,那麼在類的外面是不能直接訪問他們的,所以我為它們每個屬性提供了兩個方法,分別是去訪問他們和設定它們的值。一般在宣告類別的時候,屬性宣告成私有,而成員方法宣告成公有,那麼外面就能透過公有方法去存取私有屬性了。並且在宣告存取和設定兩種方法的時候一般使用getXXX()和setXXX()這種形式,XXX第一個字母一般大寫。當然也可以聲明成公有屬性,那麼在類別外就可以直接給它們賦值,並且存取了。但還是建議聲明成私有屬性,因為以後如果規範了的話,每一個類會單獨生命成一個php文件,專門存放這個類,聲明成私有的會保證這個類的對象裡面的值不會隨意更改,保證了安全性。

在聲明屬性的同時,也可以像類外變數一樣,宣告的同時賦值。

這裡注意:

屬性可以儲存一個值,一個數組,甚至是另一個類別的物件。例如上面的學生類別中給他加上學校屬性,這個學校也是一個類,包括學校的名字,地址等。我先聲明學校類別

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;

    //这里面各种属性

}
登入後複製
登入後複製
我这个是一个手机类,里面声明了三个常量,这里注意,声明常量不需要$符号,并且常量的名字一般大写。但是你注意我在里面存储的是int型的数据,如果我给手机型号赋值的时候虽然给他赋值是类似:$this->type = ZTE;但是我的型号存的是int型的数据,那么就会占内存少,如果我不适用常量$this->type = 'ZTE';这样我就存的字符串。并且使用常量可以提高编译速度。

这是我理解的常量的优点。但是我没怎么用过。

下一篇继续面向对象。

以上就介绍了边记边学PHP-(十二)面向对象编程2,包括了方面的内容,希望对PHP教程有兴趣的朋友有所帮助。

本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

<🎜>:泡泡膠模擬器無窮大 - 如何獲取和使用皇家鑰匙
3 週前 By 尊渡假赌尊渡假赌尊渡假赌
北端:融合系統,解釋
3 週前 By 尊渡假赌尊渡假赌尊渡假赌
Mandragora:巫婆樹的耳語 - 如何解鎖抓鉤
3 週前 By 尊渡假赌尊渡假赌尊渡假赌

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

熱門話題

Java教學
1667
14
CakePHP 教程
1426
52
Laravel 教程
1328
25
PHP教程
1273
29
C# 教程
1255
24
華為GT3 Pro和GT4的差異是什麼? 華為GT3 Pro和GT4的差異是什麼? Dec 29, 2023 pm 02:27 PM

許多用戶在選擇智慧型手錶的時候都會選擇的華為的品牌,其中華為GT3pro和GT4都是非常熱門的選擇,不少用戶都很好奇華為GT3pro和GT4有什麼區別,下面就給大家介紹一下二者。華為GT3pro和GT4有什麼差別一、外觀GT4:46mm和41mm,材質是玻璃鏡板+不鏽鋼機身+高分纖維後殼。 GT3pro:46.6mm和42.9mm,材質是藍寶石玻璃鏡+鈦金屬機身/陶瓷機身+陶瓷後殼二、健康GT4:採用最新的華為Truseen5.5+演算法,結果會更加的精準。 GT3pro:多了ECG心電圖和血管及安

修復:截圖工具在 Windows 11 中不起作用 修復:截圖工具在 Windows 11 中不起作用 Aug 24, 2023 am 09:48 AM

為什麼截圖工具在Windows11上不起作用了解問題的根本原因有助於找到正確的解決方案。以下是截圖工具可能無法正常工作的主要原因:對焦助手已開啟:這可以防止截圖工具開啟。應用程式損壞:如果截圖工具在啟動時崩潰,則可能已損壞。過時的圖形驅動程式:不相容的驅動程式可能會幹擾截圖工具。來自其他應用程式的干擾:其他正在運行的應用程式可能與截圖工具衝突。憑證已過期:升級過程中的錯誤可能會導致此issu簡單的解決方案這些適合大多數用戶,不需要任何特殊的技術知識。 1.更新視窗與Microsoft應用程式商店應用程

iOS的developer版和public版有什麼不同? iOS的developer版和public版有什麼不同? Mar 01, 2024 pm 12:55 PM

每年Apple發布新的iOS和macOS大版本之前,用戶都可以提前幾個月下載測試版搶先體驗一番。由於大眾和開發人員都使用該軟體,蘋果公司為兩者推出了developer和public版即開發者測試版的公共測試版。 iOS的developer版和public版有什麼差別呢?從字面上的意思來說,developer版是開發者測試版,public版是公共測試版。 developer版和public版面向的物件不同。 developer版是蘋果公司給開發者測試使用的,需要蘋果開發者帳號才能收到下載併升級,是

交易 |經濟實惠的 HP Victus 遊戲筆記型電腦配備 RTX 3050 擊敗 RX 6550M 在百思買促銷中獲得 40% 折扣 交易 |經濟實惠的 HP Victus 遊戲筆記型電腦配備 RTX 3050 擊敗 RX 6550M 在百思買促銷中獲得 40% 折扣 Aug 09, 2024 pm 09:51 PM

HP Victus 15 是一款15.6 吋入門級遊戲筆記型電腦,通常不值得太多考慮,但百思買的一項新優惠為入門級遊戲筆記型電腦提供40% 的折扣,將價格從799.99 美元降至非常低的價格。

如何修復無法連線到iPhone上的App Store錯誤 如何修復無法連線到iPhone上的App Store錯誤 Jul 29, 2023 am 08:22 AM

第1部分:初始故障排除步驟檢查蘋果的系統狀態:在深入研究複雜的解決方案之前,讓我們先從基礎知識開始。問題可能不在於您的設備;蘋果的伺服器可能會關閉。造訪Apple的系統狀態頁面,查看AppStore是否正常運作。如果有問題,您所能做的就是等待Apple修復它。檢查您的網路連接:確保您擁有穩定的網路連接,因為「無法連接到AppStore」問題有時可歸因於連接不良。嘗試在Wi-Fi和行動數據之間切換或重置網路設定(「常規」>「重置」>「重置網路設定」>設定)。更新您的iOS版本:

php提交表单通过后,弹出的对话框怎样在当前页弹出,该如何解决 php提交表单通过后,弹出的对话框怎样在当前页弹出,该如何解决 Jun 13, 2016 am 10:23 AM

php提交表单通过后,弹出的对话框怎样在当前页弹出php提交表单通过后,弹出的对话框怎样在当前页弹出而不是在空白页弹出?想实现这样的效果:而不是空白页弹出:------解决方案--------------------如果你的验证用PHP在后端,那么就用Ajax;仅供参考:HTML code

聊聊Vue2為什麼能透過this存取各種選項中屬性 聊聊Vue2為什麼能透過this存取各種選項中屬性 Dec 08, 2022 pm 08:22 PM

這篇文章帶大家解讀vue原始碼,來介紹一下Vue2中為什麼可以使用 this 存取各種選項中的屬性,希望對大家有幫助!

一篇搞懂this指向,追趕70%的前端人 一篇搞懂this指向,追趕70%的前端人 Sep 06, 2022 pm 05:03 PM

同事因為this指向的問題卡住的bug,vue2的this指向問題,使用了箭頭函數,導致拿不到對應的props。當我跟他介紹的時候他竟然不知道,隨後也刻意的看了一下前端交流群,至今最起碼還有70%以上的前端程式設計師搞不明白,今天給大家分享一下this指向,如果啥都沒學會,請給我一個大嘴巴子。

See all articles