PHP 入门 - 6.面对对象
文章目錄
- 聲明一個類
- 聲明屬性
- 聲明類常量
- 繼承
- trait
- 構造函數
- 析構函數
- 自省
- 序列化
聲明一個類
語法如下:
class classname[ extends baseclass [ implements interfacename, [ interfacename, ...] ] ] {[ use traitname, [traitname, ...]];[ visiblity $property[ = value]; ...][ function functionname (args) ]{//code} }PHP 中的面對對象和 Java 中的面對對象用法基本相似。只是用法更隨意。
比如:它可以用一個變量來提供類名:
$class = "Person"; $object = new $class; // 等同于 $object = new Person;靜態方法通過類來調用,而不是通過對象調用。靜態方法由類名加兩個冒號(::)和函數名構成。另:在靜態方法內部,$this 會失效。
HTML::p("Hello, world");對象一旦被創建,就會通過引用傳遞。要像得到一個對象的副本,可以使用 clone 操作符。
$f = new Person("Fred", 35); $b = clone $f;用 final 關鍵字來聲明一個類/方法,子類將無法重寫這個類/方法。
在一個對象類的實例中,可以用 self 關鍵字來調用屬性或方法。
聲明屬性
在 PHP 中,你可以任何位置增加新的屬性。
class Person {function getName(){return $this->name;}function setName($newName){$this->name = $newName;} } $person = new Person; $person->setName("plane"); echo $person->getName(); // plane聲明類常量
使用 const 關鍵詞來聲明常量。一旦定義了一個類常量,他的值就不能在改變。
繼承
如果一個子類與它的父類具有相同名稱的屬性或方法,則子類中的屬性和方法比父類中的優先級高。引用類的屬性會返回之類中的屬性值,引用類方法時也會調用子類中的方法。
parent::birthday(); // 調用父類中的 birthday 方法 self::birthday(); // 調用當前類中的 birthday 方法trait
PHP 5.4 新增特性,它允許在不創建一個父類的情況下,便可以在不同層次結構的類中復用類外部的代碼,共享不同類的函數方法。語法如下:
trait traitname [ extends baseclass ] {[ use traitname, [ traitname, ... ]];[ abstract function functionname(); [...] ][ visibility $property [ = value ]; ... ][ function functionname (args){//code} ] }如果引入多個 trait 出現重名的情況,可以在類中定義一個別名。
trait Command {function run(){echo "Executing a command";} }trait Marathon {function run(){echo "Running a marathon";} }class Person {use Command, Marathon {Command::run as runCommand;Marathon::run insteadof Command;} }$person = new Person; $person->run(); // "Running a marathon" $person->runCommand(); // "Executing a command"構造函數
在創建一個對象是,會自動調用名為 __construct() 的函數。
PHP 并不支持構造函數鏈的自動調用,也就是說,當實例化子類時,只有子類自己構造函數會被調用,父類的構造函數不會被調用。我們可以顯式地調用父類的構造函數:parent::__construct()。
析構函數
當一個對象被銷毀時,就會自動調用名為 __destruct() 的函數。
自省
自審是一種讓程序檢查對象特性的機制,可以檢查對象的名稱、父類、屬性和方法等。
class_exists() : 確定一個類是否存在。
method_exists() : 確定函數是否存在。
get_declared_classes() : 返回一個包含所有已定義的類的數組。
get_class_methods() : 得到一個類中只有默認值的屬性。
get_class_vars() : 得到一個類中所有方法。
get_object_vars() : 返回對象中只有默認值的屬性。
get_parent_class() : 得到一個類的父類名稱。
display_classes() : 顯示所有當前已聲明的類,以及他們的方法和屬性。
is_object() : 確定是否為一個對象。
序列化
序列化一個對象是指將一個對象轉換成字節流的形式,這樣就可以將對象保存在文件中。這對數據的持久化非常有用。PHP 中的序列化幾乎時全自動的,除了要調用 serialize() 和 unserialize() 函數外,你幾乎不需要做任何額外的工作。
在序列化和反序列化的過程中,PHP 有兩個用于對象的鉤子( hook ):
__sleep() : 一個對象被序列化之前被調用。
__wakeup() : 一個對象從字節流中被創建時調用。
感謝你看到了這里。如果文章有錯誤,請評論指正,謝謝!
創作挑戰賽新人創作獎勵來咯,堅持創作打卡瓜分現金大獎總結
以上是生活随笔為你收集整理的PHP 入门 - 6.面对对象的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: PHP 入门 - 5.数组
- 下一篇: PHP 入门 - 7.Web技术