0

$this->a->b->c->d PHP のスーパークラスからメソッドを呼び出す

このリンクで質問しました このテクニックに問題があります クラスからサブクラスを呼び出すことができます

このような

$chesterx->db->query();

サブクラスから別のクラスを取得したい

例えば

SQL クラスから取得した execute をクエリしたい

            ROOT
             |
sql <---  chesterx --->  db

db の sql クラスを使いたい

dbクラスからchesterxクラスを返すことができない問題

/編集/

ニュース、メンバー、カテゴリ、データベース、クエリなどのクラスがいくつかあります

そして、私は件名のトップにあったリ​​ンクのようにそれをしました

パブリック関数 __construct(){

    function __construct(){  
      if(!$this->db){                                       
                 include(ROOT."/func/class/bp.db.class.php");
                 $this->db = new db;
            }
if(!$this->chester){                                        
                 include(ROOT."/func/class/bp.chester.class.php");
                 $this->db = new chester;
            }
        }

このコードで db クラスを呼び出したところ、db クラスのメソッドを適切に呼び出して使用できるようになりました

例えば

db のメソッドを使いたい

そのメソッドには、チェスター クラスのメソッドからデータを返す値が含まれています

私は自分自身を明確にしたい/編集/

とにかくこれを行うことはありますか?

4

2 に答える 2

3

以下のスニペットは解決策になるかもしれませんが、循環参照はあまり好きではありません。試してみて、必要に応じて使用してください。ちなみに、あなたがクラスとサブクラスと呼んでいるものは、実際には包含クラスと包含クラスです。

class Database
{
    public $chesterx;

    public function __construct($chesterx)
    {
        $this->chesterx = $chesterx;
    }
}

class Sql
{
    public $chesterx;

    public function __construct($chesterx)
    {
        $this->chesterx = $chesterx;
    }
}

class Chesterx
{
    public $db;

    public $sql;

    public function __construct()
    {
        $this->db  = new Database($this);
        $this->sql = new Sql($this);
    }
}
于 2009-04-24T15:26:48.320 に答える
3

Ionut G. Stan の解決策はあなたのケースに適していると思いますが、factory/singleton patternを検討することもできますが、チェスタークラスがグローバルクラスであり、一度しか呼び出されない場合にのみ有効です

于 2009-04-24T22:34:53.800 に答える