PHPにおいて、


parent::hoge();

で親クラスのメソッドを使用できますが、
親の親のクラスのメソッドを使用しようと、

parent::parent::hoge();

とするとエラーになります。

親クラスより上位のクラスには手を入れられないため、
子クラスのメソッド内で、親の親のクラスのメソッドを呼ぶ方法があれば、
教えて頂きたいです。

回答の条件
  • 1人2回まで
  • 登録:2009/03/24 12:05:06
  • 終了:2009/03/31 12:10:02

回答(1件)

id:sphire No.1

sphire回答回数115ベストアンサー獲得回数122009/03/28 13:48:17

ポイント60pt

親クラスに手を入れられるのであれば、親クラス内に親の親クラスのメソッドを呼ぶメソッドを実装してはいかがでしょうか(ややこしい)

<?php

class OyaNoOya {
  public function Hoge(){
    echo 'OyaNoOya::Hoge()', "\n";
  }
}

class Oya extends OyaNoOya {
  public function Hoge(){
    echo 'Oya::Hoge()', "\n";
  }
  public function OyaHoge(){
    parent::Hoge();
  }
}

class Ko extends Oya {
  public function Hoge(){
    echo 'Ko::Hoge()', "\n";
  }
  public function OyaHoge(){
    parent::Hoge();
  }
  public function OyaNoOyaHoge(){
    parent::OyaHoge();
  }
}

Ko::Hoge();
Ko::OyaHoge();
Ko::OyaNoOyaHoge();
id:FnuLnu

ここで言う、OyaクラスはPEARライブラリのクラスなので、

極力手を加えたくないという事情があります。

Oyaではなく、OyaNoOyaを継承してKoを作るとか、

OyaNoOyaのHogeをコピペでKoに移植するであるとか、

いくつか回避方法は思いついたのですが、

やはり言語機能としては、用意されてないという事ですかね。

2009/03/28 19:28:16
  • id:sphire
    回答では「親クラスより上位」を「親クラスは含まないもの」と解釈していました。

    ところで「親の親クラスの関数を直接呼ぶ」ではもちろんダメなのでしょうね?

    具体的なライブラリ名が出てくれば、代替案とかも考えやすいのですけど。

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません