1、public
可以在類內、類外被其他的類和對象調用。子類可以繼承和使用父類中所有的公共成員。
對於成員方法,如果沒有寫關鍵字,默認就是public。
2、private
只能在所屬類的內部被調用和修改,不可以在類外被訪問,即使是子類中也不可以。
3、protected
可以在本類和子類中被調用,其他地方則不可以被調用。
4、類的繼承
(1) class 子類名稱 extends 父類名稱{ }
(2) parents:: 父類的成員方法(參數); //通過parent::關鍵字在子類中調用父類中的成員方法
5、抽象類和接口
抽象類和接口都是不能被實例化的特殊類。它們都是配合面向對象的多態性一起使用。
(1) 抽象類只能作爲其他類的父類來使用。
abstract class 抽象類名稱{
//抽象類的成員變量列表
abstract function 成員方法1(參數);
abstract function 成員方法2(參數);
}
抽象類和普通類相似,包含成員變量、成員方法。兩者的區別在於:抽象類至少要包含一個抽象方法。抽象方法沒有方法體,其功能的實現只能在子類中完成。抽象方法也是使用abstract關鍵字來修飾。
抽象類和抽象方法主要應用於複雜的層次關係中,這種層次關係要求每一個子類都包含並重寫某些特定的方法。
(2)接口
繼承特性簡化了對象、類的創建,增加了代碼的可重用性。但PHP只支持單繼承。如果想實現多重繼承,就要使用接口。PHP可以實現多個接口。
interface 接口名稱{
//常量成員 //接口中不能聲明變量,只能使用const關鍵字聲明爲常量的成員屬性
//抽象方法 //成員方法必須是抽象方法
}//接口中所有成員必須具備public的訪問權限
接口之間可以使用extends實現繼承。
接口可以直接使用接口名稱在接口外去獲取常量成員的值。
在子類中繼承接口使用implements關鍵字。實現多個接口的繼承,每個接口之間使用逗號連接。
class 子類名 implements 接口1,接口2{ }
**既然通過子類繼承了接口中的方法,那麼接口中的所有方法必須都在子類中實現,否則PHP將拋出錯誤信息。
6、final關鍵字
被final修飾過的類和方法就是“最終的版本”,
final class class_name{
//..
}
說明該類不可以再被繼承,也不能再有子類。
final function method_name()
說明該方法在子類中不可以進行重寫,也不可以被覆蓋。
7、static關鍵字——聲明靜態類成員
靜態屬性和靜態方法不需要在被類實例化的情況下就可以直接使用。在對象被銷燬後,仍然保存被修改的靜態數據,以便下次繼續使用。
(1) 靜態屬性
靜態屬性就是使用static修飾的成員屬性,它屬於類本身而不屬於類的任何實例。它相當於存儲在類中的全局變量,可以在任何位置通過類來訪問。靜態屬性訪問的語法如下:
類名稱::$靜態屬性名稱
其中“::”被稱爲範圍解析操作符,用於訪問靜態成員、靜態方法和常量,還可以用於覆蓋類中的成員和方法。
如果要在類內部的成員方法中訪問靜態屬性,那麼在靜態屬性的名稱前加上操作符"self::"即可。
(2)靜態方法
靜態方法不受任何對象的限制,可以不通過類的實例化直接引用類中的靜態方法。
類名稱::靜態方法名稱([參數1,參數2,....])
同樣如果要在類內部的成員方法中引用靜態方法,那麼在靜態方法的名稱前加上操作符"self::"即可。
**在靜態方法中,只能調用靜態變量,而不能調用普通變量,普通方法則可以調用靜態變量。
8、clone關鍵字——克隆對象
使用clone克隆的對象與原對象沒有任何關係,它是將原對象從當前位置重新複製了一份,也就是相當於在內存中新開闢了一塊空間。
$克隆對象名稱=clone $原對象名稱;
對象克隆成功後,它們中的成員方法、屬性以及值是完全相同的。如果要爲克隆後的副本對象在克隆時重新爲成員屬性賦初始值,那麼就要用到魔術方法“__clone()”。
“__clone()”自動包含$this和$that兩個對象的引用,$this是副本對象的引用,$that是原本對象的引用。
<?php
class Book{ //類Book
private $object_type = 'book'; //聲明私有變量$object_type,並賦初值爲book
public function setType($type){ //聲明成員方法setType,爲變量$object_type賦值
$this -> object_type = $type;
}
public function getType(){ //聲明成員方法getType,返回變量$object_type的值
return $this -> object_type;
}
public function __clone(){ //聲明__clone()方法
$this ->object_type = 'computer'; //將變量$object_type的值修改爲computer
}
}
$book1 = new Book(); //實例化對象$book1
$book2 = clone $book1; //使用普通數據類型的方法給對象$book2賦值
echo '對象$book1的變量值爲:'.$book1 -> getType(); //輸出對象$book1的值
echo '<br>';
echo '對象$book2的變量值爲:'.$book2 -> getType();
?>