PHP クラス関数をコールする「::」演算子

| 2008年01月24日 04:02

サブクラスでオーバーライドした親クラスのメソッドを呼び出すものと思っていた「::」について調べてみたらそれは使い方の1つに過ぎないようだ。

そもそも「::」はクラス関数を呼び出す演算子ということ。なんで下記のようにオブジェクトを作成しなくてもクラス関数を利用できる。

サンプルコード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;
 */

サンプルコード1実行結果

thisは「」利用できない。
これはview2()

クラス関数を呼び出す演算子なんでプロパティを参照することはできません。またオブジェクトを作成してないので$thisは利用できません。

プロパティにアクセスするにはオブジェクトを作成する必要があるってことですね。

でもってサブクラスでオーバーライドした親クラスのメソッドを呼び出すには書き方が下記のように

サンプルコード2


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();

サンプルコード2実行結果

MyClass_Bプロパティ
MyClass_Bプロパティ
MyClass_Cプロパティ

「親クラス名::メソッド」と「parent::メソッド」の2つありますが「parent::メソッド」のほうがよい。

理由は親クラス名を複数の場所で利用するとクラス名が変更になった際に面倒だから。

参照サイト
PHPマニュアル「::」
PHPマニュアル「親クラス」

PHP クラス関数をコールする「::」演算子タグ:

トラックバック
  • http://www.kantenna.com/cgi-bin/mt/mt-tb.cgi/205
コメントを投稿

(いままで、ここでコメントしたことがないときは、コメントを表示する前にこのブログのオーナーの承認が必要になることがあります。承認されるまではコメントは表示されません。そのときはしばらく待ってください。)





この情報を登録しますか?

このサイトは次のライセンスで保護されています。

Creative Commons License

IT業界、エンジニア関連の求人
Web業界に精通したエージェントなので、希望に合った仕事、プロジェクト、雇用形態を紹介してくれてしっかりと転職活動をサポートしてくれます。
初心者のみ採用!【スノーグラス】WEB系エンジニア募集
初心者のみのweb系エンジニア求人!なんでだ?そろそろ転職考えてるのでここ行ってみようかな・・・
Twitter Updates