物件實例屬性即變數,但必須用 -> 運算子存取,屬性名不需加 $ 符號。
可串連 ->:若屬性包含物件,可用多個 -> 存取內部物件屬性。甚至可在雙引號字串中嵌入這些運算式。
<?php
class Room {
public $name;
function __construct($name="unnamed") { $this->name = $name; }
}
class House {
public $room = array();
}
$home = new House();
$home->room[] = new Room("bedroom");
$home->room[] = new Room("kitchen");
$home->room[] = new Room("bathroom");
print($home->room[0]->name); // 輸出 bedroom
?>
用 -> 呼叫實例方法,執行方式與一般函數幾乎相同。繼承而來的屬性與方法在子類別同樣有效,存取方式相同。
PHP 有兩個特殊命名空間:parent 指向父類別,self 指向當前類別。範例展示 parent::__construct() 呼叫父建構函數,self::bark() 在建構函數中呼叫自身方法。
<?php
class Animal {
public $blood, $name;
public function __construct($blood, $name=NULL) {
$this->blood = $blood;
if($name) $this->name = $name;
}
}
class Mammal extends Animal {
public $furColor, $legs;
function __construct($furColor, $legs, $name=NULL) {
parent::__construct("warm", $name);
$this->furColor = $furColor;
$this->legs = $legs;
}
}
class Dog extends Mammal {
function __construct($furColor, $name) {
parent::__construct($furColor, 4, $name);
self::bark();
}
function bark() { print("$this->name says 'woof!'"); }
}
$d = new Dog("Black and Tan", "Angus");
?>
$this->$property$obj->$method()$obj->getObject()->callMethod(),避免中間變數,有助實現 Factory 等設計模式(PHP 舊版不允許)。