每個類的定義都以關鍵字 class 開頭,後面跟著類名,可以是任何非
PHP 保留字的名字。後面跟著一對花括號,裡面包含有類成員和方法的定義。偽變量
$this 可以在當一個方法在物件內定呼叫時使用。$this
是一個到呼叫物件(通常是方法所屬於的對象,但也可以是另一個對象,若果該方法是從第二個對象內靜態呼叫的話)的引用。看下面例子:
例子 19-1. 簡單的類定義
<?php class SimpleClass { // 成員聲明 public $var = 'a default value';
// 方法聲明 public function displayVar() { echo $this->var; } } ?>
|
|
要建立一個對象的案例,必須建立一個新對象並將其賦給一個變量。當建立新物件時該物件總是被賦值,除非該物件定義了構造函數並且在出錯時拋出了一個異常。
例子 19-2. 建立一個案例e
<?php $instance = new SimpleClass() ?>
|
|
當把一個物件已經建立的案例賦給一個新變量時,新變量會訪問同一個案例,就和用該物件賦值一樣。此行為和給函數傳遞入案例時一樣。可以用複製成影像檔給一個已建立的對象建立一個新案例。
例子 19-3. 物件賦值
<?php $assigned = $instance; $reference =& $instance;
$instance->var = '$assigned will have this value';
$instance = null; // $instance and $reference become null
var_dump($instance); var_dump($reference); var_dump($assigned); ?>
|
上例將輸出: NULL
NULL
object(SimpleClass)#1 (1) {
["var"]=>
string(30) "$assigned will have this value"
} |
|
一個類可以在聲明中用 extends
關鍵字繼承另一個類的方法和成員。不能增加多個類,只能繼承一個基類。
被繼承的方法和成員可以通過用同樣的名字重新聲明被覆蓋,除非父類定義方法時使用了
final 關鍵字。可以通過
parent::
來訪問被覆蓋的方法或成員。
例子 19-4. 簡單的類繼承
<?php class ExtendClass extends SimpleClass { // Redefine the parent method function displayVar() { echo "Extending class\n"; parent::displayVar(); } }
$extended = new ExtendClass(); $extended->displayVar(); ?>
|
上例將輸出: Extending class
a default value |
|