2

Childクラス内でgetTest()関数を呼び出そうとします。最初にExtクラスのインスタンスを初期化するので、メイン プロパティ$extにそれが含まれているはずです。しかし、クラスはそれを継承せず、得られたエラーメッセージは次のとおりです。

非オブジェクトでのメンバー関数 getTest() の呼び出し

問題はどこにありますか?

<?php

 $A = new Main;

 class Main
 {
    protected $ext = null;
    function __construct()
    {
      $this->ext= new Ext();
      new Child;
    }
 }

 class Child extends Main
 {
    function __construct()
    {
      echo $this->ext->getTest();
    }
 }


 class Ext extends Main
 {

    public function getTest()
    {
      return "cool";
    }
 }

 ?>

私はそれを別の方法で解決できることを知っています:

class Child
{
  private $Main;
  function __construct( &$Main ) { ... }
}

しかし、なぜそれがうまくいかないのか理解したい..

4

1 に答える 1

2

オブジェクトを構築する時点では、属性にはまだ値がありません。

属性を使用する前に、親コンストラクターを呼び出す必要があります

function __construct()
{
    parent::__construct();
    echo $this->ext->getTest();
}
于 2012-11-10T09:22:18.080 に答える