0

a.php、b.php、c.php のようなページがいくつかあります。各 php ファイルには、次のコンストラクター関数があります。

var database;
function __construct() {
     $database = $this->router->database;
}

私がやりたいことは次のとおりです。

function __construct() {
     $this->router->construct();
}

したがって、ルーターの construct() 関数は、「$this->router->database」が割り当てられた $database 変数を作成する必要があります。コントローラーに他の変更を加えることなく、 $database->query() を実行できるはずです。

これどうやってするの?おそらく非常に基本的な返信がありますが、eval()について考えていても、今はかなり混乱しています。

どんな助けでも大歓迎です。

4

2 に答える 2

1

私はあなたが実際に達成しようとしていることについて少し曖昧ですが、それらすべてのページの重複するコンストラクターを排除しようとしているようです。その場合は、親クラスを作成して適切なコードを挿入し、親クラスから他の各ページを継承することができます。

class PageParent { 

  var $database;

  function __construct() {    
    $database = $this->router->database; 
  }

}

そしてあなたの他のファイルはただ必要になるでしょう

class Page extends PageParent
{
  function __construct() {
    /* Call parent class's constructor first... */
    parent::__construct();

    /* then add additional code here */

  }

}
于 2012-09-07T01:52:32.713 に答える
0

何が欲しいのか正確にはわかりません。これらはページであるとあなたは言いますが、コンストラクターを使用している場合は、クラスを見ています。その場合は、クラスでルータークラスのプロパティを取得し、クラス内でそのコンストラクターを実行して、ルーターコンストラクターが実行することをすべて実行できるようにする必要があるようにも見えます。

その場合、本当にやりたいのはルータークラスを拡張することです。知らなかった場合、クラスが別のクラスを拡張すると、親クラス(つまり、拡張しているクラス)のすべてのプロパティとメソッド(つまり、変数と関数)が自動的に継承され、新しいクラスを追加できるようになります。プロパティまたはメソッドが保護またはパブリックとして設定されている場合は、それらを独自のプロパティで上書きすることもできます(ただし、何をしているのかをよく知っているか、厄介な結果が得られる可能性があります)。

したがって、1つの例は次のようになります。

class my_class extends router
{
    private $blah;
    // and so on; these can be accessed by using $this->blah in any function you like
    public function __construct()
    {
        // Your custom code, if any, goes here
        parent::__construct();
    }
}

覚えておくべきことの1つは、拡張したいクラスが「最終」クラスである場合、拡張できないため、とにかく運が悪い可能性があるということです。

オブジェクト指向プログラミング(別名「OOP」)の動作のより詳細な分析については、PHPのドキュメントは実際には非常に徹底的で、比較的理解しやすいものです。

お役に立てれば!

于 2012-09-07T01:50:19.290 に答える