無料CGI、PHPサイト(確認画面付きメールフォーム・メーリングリスト・メルマガ設置、逆アクセスランキング、画像カウンター等)PHPマニュアル by k-sky

クラスの基礎

class

各クラスの定義は、classキーワードで始まり、クラス名が続きます。 クラス名には、PHPの予約語以外のあらゆる名前を 使用することができます。 波括弧の中に、クラスのメンバーとメソッドの定義が記述されます。 メソッドがオブジェクトコンテキストからコールされる場合 (通常は、メソッドが属するオブジェクトですが、 メソッドが第二のオブジェクトのオブジェクトの コンテキストから スタティックに コールされる場合には、別のオブジェクトとなる場合もあります)、 疑似変数 $this が利用可能です。 以下にこの例を示します。

例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.

例2 簡単なクラス定義

<?php
class SimpleClass
{
    
// メンバ宣言
    
public $var 'a default value';

    
// メソッド宣言
    
public function displayVar() {
        echo 
$this->var;
    }
}
?>

デフォルト値は定数でなければなりません。(たとえば) 変数、クラスのメンバあるいは関数コールなどは使用できません。

例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(truefalse);
    
    
}
?>

注意: クラスやオブジェクトを扱うための、便利な関数があります。 クラス/オブジェクト関数 を参照ください。

ヒアドキュメントとは異なり、nowdoc は静的データコンテキストでも使用することができます。

例4 静的なデータの例

<?php
class foo {
    
// PHP 5.3.0 以降で対応
    
public $bar = <<<'EOT'
bar
EOT
;
}
?>

注意: Nowdoc は PHP 5.3.0 以降で使用可能です。

new

あるクラスのインスタンスを生成する際、新たにオブジェクトが作成され、 変数に代入される必要があります。 新しいオブジェクトが作成される際には、そのオブジェクトが エラー時に 例外を投げる よう定義された コンストラクタを有していない限り、 常にオブジェクトが代入されます。 クラスは、そのインスタンスを作成する前に定義すべきです (これが必須となる場合もあります)。

例5 インスタンスを作成する

<?php
$instance 
= new SimpleClass();
?>

クラスのコンテキストにおいては、 new selfnew parent のようにして新しいオブジェクトを作成することができます。

作成済みのクラスのインスタンスを新たな変数に代入する場合、新しい変数は、 代入されたオブジェクトと同じインスタンスにアクセスします。 この動作は、インスタンスを関数に渡す場合も同様です。 作成済みのオブジェクトのコピーは、その クローンを作成 することにより作成可能です。

例6 オブジェクトの代入

<?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

クラスは、宣言部にextendsキーワードを含めることで、他のクラスのメソッドとメソッドと メンバーを継承することができます。他重継承を行うことはできず、クラスが継承できるベース クラスは一つだけです。

継承されたメソッドとメンバーは、親クラスで final としてメソッドが定義されていない限り、親クラスで定義されたのと同じ名前で 再度宣言を行うことでオーバーライドすることができます。 parent::で 参照することにより、このオーバーライドされたメソッドまたはスタティックメンバーに アクセスすることができます。

例7 簡単なクラスの継承

<?php
class ExtendClass extends SimpleClass
{
    
// 親クラスのメソッドを再定義
    
function displayVar()
    {
        echo 
"Extending class\n";
        
parent::displayVar();
    }
}

$extended = new ExtendClass();
$extended->displayVar();
?>

上の例の出力は以下となります。

Extending class
a default value