PHP 5.0オブジェクトモデルの深さ探索の属性と方法
連用できます。オブジェクトの属性にオブジェクトが含まれている場合、2つの演算子を使って内部オブジェクトの属性を取得できます。 二重引用文字列でこれらの表現を置くこともできます。 以下の例では、オブジェクトHouseのプロパティroomは、Roomオブジェクトのセットを含んでいます。アクセス方法とアクセス属性は似ています。->演算子は、インスタンスを指す方法で使用されます。 下の中でget LastLoginを呼び出します。この方法は、クラス外の関数とほぼ同じです。クラスが別のクラスから継承される場合、親クラスの属性と方法は、サブクラスでも有効になります。 前に述べたように、継承は非常に強いです。 継承属性にアクセスしたい場合は、ベースの属性にアクセスするように参照すればいいです。
<?php
class Room
{
public $name;
function __construct($name="unnamed")
{
$this->name = $name;
}
}
class House
{
//array of rooms
public $room;
}
//create empty house
$home = new house;
//add some rooms
$home->room[] = new Room("bedroom");
$home->room[] = new Room("kitchen");
$home->room[] = new Room("bathroom");
//show the first room of the house
print($home->room[0]->name);
?>
PHPには二つの特殊な名前空間があります。parent名前空間は父類を指し、self名前空間は現在のクラスを指します。以下の例では、親のクラスの構造関数を呼び出すには、parent名前空間を使用する方法を示しています。 selfを用いて,構造関数において別のクラスの方法を呼び出した。
<?php
class Animal //
{
public $blood; // or
public $name;
public function __construct($blood, $name=NULL)
{
$this->blood = $blood;
if($name)
{
$this->name = $name;
}
}
}
class Mammal extends Animal //
{
public $furColor; //
public $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()を使ってもいいです。あなたも->演算子を使って関数の値を返してもいいです。これはPHP以前のバージョンでは許可されていません。例えば、このような表現を書くことができます。 $Object()->calMethod()。このように中間変数の使用を回避し、Factoryモードのようないくつかの設計モードの実現にも役立つ。