KANTENNA.COM

Solarized

HOME > WEBプログラム覚書 > PHP クラス関数をコールする「::」演算子

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

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

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

サンプルコード1


class MyClass_A
{
 var $a = 'MyClass_Aプロパティ';

 function view()
 {
  echo 'thisは「' . $this->a . '」利用できない。<br />';
 }

 function view2()
 {
  echo 'これはview2()';
 }
}

//PHP5 ではFatal error
//MyClass_A::view();

MyClass_A::view2();

/**
 * エラーコード
 * MyClass_A::a;
 * MyClass_A::$a;
 */

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

これは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 (PERFECT SERIES 3)
作者:橋口 誠 | 価格:¥ 3,780

トラックバック(0)

コメント

コメントする
Name
Email Address
URL
TIME LINE
2012
02.03

[jQuery]closest()とparents()

今から16年前Netscapeブラウザのソースコードの公開方法の会議の中で、初めてオープンソースという言葉が使われた今日、 みなさんいかがお過ごしでしょうか。

今回の投稿はそれとは関係のないjQueryのparents()とclosest()が 似てたので何が違うのか試した時のメモです。

2012
02.01

[jQuery Mobile]初期化イベントメモ

jQuery Mobileは読み込まれてから

mobileinit -> pagebeforecreate -> pagecreate -> pageinit

の順番でイベントが発生する。

2012
02.01

[WordPress]管理画面のフッタのフィルタとアクション。

時間も時間なので、あまり使用頻度の高くない微妙なネタを。

会員制サイトなどで不特定多数の人にログインさせる場合、フッタのバージョン情報は隠しておきたかったり、 こじゃれたメッセージを表示したいときとか使うアクションとフィルタ。

2012
01.28

[WordPress] ブログの情報を取得する方法とノーキャッシュ疑惑

ブログのget_bloginfo()で取れないデータが必要な場合に使うもの。

2012
01.26

[jQuery Mobile]ダイアログ

jQuery Mobileにおけるダイアログの扱いはウインドウではなくページ。 なので通常のページと同様に扱える。ダイアログウインドウを出す。じゃなくダイアログページに遷移する。的な。

2012
01.25

[Ubuntu11.10]Ubuntuのインストール後の設定

インストール完了後の環境構築。PC起動時いちいちBIOSからブートドライブ選んで ブートするのかと思ってたら起動時にOS選択画面が出てくる。

すばらしいですね。

2012
01.24
2012
01.23

MinGW+Mintty+Git

MinGW+Mintty+Gitをやろうとして失敗に終わった。このエントリーには収穫できるものはありません。

2012
01.21

[PHP]共有サーバーユーザーのためのPEARインストール方法

共有サーバーでは自由にPEARのパッケージがインストールできないので、 プロジェクトローカルに設置することになりますが、以前httpベースのものを使ってみたんですけど、 やたら重くて使い物にならなかったので、僕は普通にFTPでアップするようにしてます。

ってことでプロジェクトローカルへのPEARのインストール方法。