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モードのようないくつかの設計モードの実現にも役立つ。