パーマリンク | 2008年01月24日 04:02
サブクラスでオーバーライドした親クラスのメソッドを呼び出すものと思っていた「::」について調べてみたらそれは使い方の1つに過ぎないようだ。
そもそも「::」はクラス関数を呼び出す演算子ということ。なんで下記のようにオブジェクトを作成しなくてもクラス関数を利用できる。
class MyClass_A
{
var $a = 'MyClass_Aプロパティ';
function view()
{
echo 'thisは「' . $this->a . '」利用できない。<br />';
}
function view2()
{
echo 'これはview2()';
}
}
MyClass_A::view();
MyClass_A::view2();
/**
* エラーコード
* MyClass_A::a;
* MyClass_A::$a;
*/
クラス関数を呼び出す演算子なんでプロパティを参照することはできません。またオブジェクトを作成してないので$thisは利用できません。
プロパティにアクセスするにはオブジェクトを作成する必要があるってことですね。
でもってサブクラスでオーバーライドした親クラスのメソッドを呼び出すには書き方が下記のように
class MyClass_B
{
var $b = 'MyClass_Bプロパティ';
function get()
{
return $this->b;
}
}
class MyClass_C extends MyClass_B
{
var $c = 'MyClass_Cプロパティ';
// get()メソッドをオーバーライド
function get()
{
return $this->c;
}
function view()
{
echo parent::get() . '<br />';
echo MyClass_B::get() . '<br />';
echo $this->get() . '<br />';
}
}
$c = new MyClass_C();
$c->view();
「親クラス名::メソッド」と「parent::メソッド」の2つありますが「parent::メソッド」のほうがよい。
理由は親クラス名を複数の場所で利用するとクラス名が変更になった際に面倒だから。
Copyright 2006-2008 KANTENNA.COM Reserved.