1

PHPで派生オブジェクトからベースオブジェクトを取得することは可能ですか?

このようなもの

class base {}
class derived extends base{
public function getBase()
{
         return (base)$this;
}

上記のコードは、エラーをスローします

4

2 に答える 2

0

基本クラスの名前を取得しようとしている場合は、次の方法で取得できます。

class base {
  public function getClassName() {
    return "base";
  }
}
class derived extends base{
  public function getBaseClassName() {
    return parent::getClassName();
  }
  public function getClassName() {
    return "derived";
  }
}

$d = new derived();
echo $d->getBaseClassName();

編集:継承を使用してクラスを拡張する場合(例:) 、それは一種のであり、のすべてのインスタンスはのインスタンスでもあるderived extends baseと言っています。ほとんどのオブジェクト指向言語では、2つのインスタンスは別々のエンティティではなく、別々に扱うことはできません。(C ++は、この点に関する規則の例外です)。derived basederived basebasederived

インスタンスを個別に処理する必要がある場合、継承はジョブにとって間違ったツールです。継承ではなく、包含による拡張を使用します。これは次のようになります。

class base {

  public someBaseFunction() { 
    // ...
  }
}

class derived {

  /**
   * each instance of `derived` *contains* an in instance of `base`
   * that instance will be stored in this protected property
   */
  protected $base;

  /**
   * constructor
   */
  function __construct() {

    // remember to call base's constructor
    // passing along whatever parameters (if any) are needed
    $this->base = new base();

    // ... now do your constructor logic, if any ...

  }

  /**
   * Here's the method that fetches the contained
   * instance of `base`
   */
  public function getBase() {
    return $this->base;
  }

  /**
   * If needed, `derived` can implement public elements
   * from `base`'s interface. The logic can either delegate
   * directly to the contained instance of base, or it can
   * do something specific to `derived`, thus "overriding" 
   * `base`'s implementation.
   */
  public function someBaseFunction() {
    return $this->base->someBaseFunction();
  }

  /**
   * of course, `derived` can implement its own public
   * interface as well...
   */
  public function someOtherFunction() {
  }
}
于 2012-08-23T05:23:57.597 に答える
0

parent::親メソッド、プロパティ、または定数に解決するために使用できます。

于 2012-08-23T05:20:44.290 に答える