各クラスの定義は、classキーワードで始まり、クラス名が続きます。
   クラス名には、PHPの予約語以外のあらゆる名前を
   使用することができます。
   波括弧の中に、クラスのメンバーとメソッドの定義が記述されます。
   メソッドがオブジェクトコンテキストからコールされる場合
   (通常は、メソッドが属するオブジェクトですが、
   メソッドが第二のオブジェクトのオブジェクトの
   コンテキストから スタティックに
   コールされる場合には、別のオブジェクトとなる場合もあります)、
   疑似変数 $this が利用可能です。
   以下にこの例を示します。
    
例 19-1. オブジェクト指向言語における $this 変数 
<?php class A {     function foo()     {         if (isset($this)) {             echo '$this is defined (';             echo get_class($this);             echo ")\n";         } else {             echo "\$this is not defined.\n";         }     } }
  class B {     function bar()     {         A::foo();     } }
  $a = new A(); $a->foo(); A::foo(); $b = new B(); $b->bar(); B::bar(); ?>
 |  
 上の例の出力は以下となります。 $this is defined (a)
$this is not defined.
$this is defined (b)
$this is not defined.  |  
  | 
  例 19-2. 簡単なクラス定義 
<?php class SimpleClass {     // メンバ宣言     public $var = 'a default value';
      // メソッド宣言     public function displayVar() {         echo $this->var;     } } ?>
 |  
  | 
    デフォルト値は定数でなければなりません。(たとえば)
    変数、クラスのメンバあるいは関数コールなどは使用できません。
    
例 19-3. クラスのメンバのデフォルト値 
<?php class SimpleClass {     // 無効な形式のメンバ宣言     public $var1 = 'hello '.'world';     public $var2 = <<<EOD hello world EOD;     public $var3 = 1+2;     public $var4 = self::myStaticMethod();     public $var5 = $myVar;
      // 有効な宣言     public $var6 = myConstant;     public $var7 = self::classConstant;     public $var8 = array(true, false);           } ?>
 |  
  | 
   
   あるクラスのインスタンスを生成する際、新たにオブジェクトが作成され、
   変数に代入される必要があります。
   新しいオブジェクトが作成される際には、そのオブジェクトが
   エラー時に 例外を投げる
   よう定義された
   コンストラクタを有していない限り、
   常にオブジェクトが代入されます。
   クラスは、そのインスタンスを作成する前に定義すべきです
   (これが必須となる場合もあります)。
  
例 19-4. インスタンスを作成する 
<?php $instance = new SimpleClass(); ?>
 |  
  | 
   作成済みのクラスのインスタンスを新たな変数に代入する場合、新しい変数は、
   代入されたオブジェクトと同じインスタンスにアクセスします。
   この動作は、インスタンスを関数に渡す場合も同様です。
   作成済みのオブジェクトのコピーは、その
   クローンを作成
   することにより作成可能です。
  
例 19-5. オブジェクトの代入 
<?php $assigned   =  $instance; $reference  =& $instance;
  $instance->var = '$assigned will have this value';
  $instance = null; // $instance と $reference は 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-6. 簡単なクラスの継承 
<?php class ExtendClass extends SimpleClass {     // 親クラスのメソッドを再定義     function displayVar()     {         echo "Extending class\n";         parent::displayVar();     } }
  $extended = new ExtendClass(); $extended->displayVar(); ?>
 |  
 上の例の出力は以下となります。 Extending class
a default value  |  
  |