1

私は自分の状況をできるだけ明確に説明しようとします。

枠組みを作っています。そのシステムには次のディレクトリが含まれます:
1) コア - ルーティング、メイン クラス (オートロード、構成、定数)、リクエスト
2) ヘルパー
3) ライブラリ

index.php では、ベース URL やインデックス ファイルなど、最も重要な構成変数をすべて設定します。それらを「メインクラス」内に設定しました。

これらの属性は非公開です。リクエスト フロー中に変更されたくないからです。

したがって、これらの変数への唯一のアクセス ポイントは、「メイン クラス」メソッドからです。


さて、これらのプライベート変数の 1 つが$_base_url.

ただし、URL クラス (ヘルパー ディレクトリ内) など、より適切な場所からユーザーが base_url にアクセスできるようにしたいと考えています。


これを実現するには、「メイン クラス」内の get_base_url() と url クラス内の get_base_url() の 2 つのメソッドを作成する必要があります。これは次のようになります。

class Url {

   public static function get_base_url() {
      return Main_Class::get_base_url();
   }

}

私の問題は、さまざまなクラスから呼び出したい変数がいくつかあることです。

繰り返しコードがたくさんあります。

私が見る唯一の解決策は、これらの変数を異なるクラスに直接設定することですが、メインクラス内に集中させたいと思います。

これをどのように処理すればよいですか?

4

2 に答える 2

0

変数 (または好みのもの) と呼ばれる別のクラスを作成し、そのクラスで静的変数を使用して、それらを前後に呼び出すことができます。このようなもの:

<?php class Variables {
  static $_base_url = "http://base_url";
} ?>

そうすれば、次のように変数を呼び出すことができます。

Variables::$_base_url;

コメントを拡張するには:

継承を使用すると、2 つのクラスが同じ $variable に対して異なる値を持つ状況が発生する可能性があります。この例では、すべてのインスタンスが $_base_url に対して異なる値を保持します。

class ParentClass {
  protected $_base_url = "SOME VALUE";
}

class SubClassA extends ParentClass {

  protected __construct() {
    $this->_base_url = 'VALUE X';
  }
}

class SubClassB extends ParentClass {

  protected __construct() {
    $this->_base_url = 'DIFFERENT VALUE THAN SubClassA';
   }
}

繰り返しますが、それはあなたが達成しようとしていることに依存します。変数を設定のように動作させたい場合、またはそれらの変数をインスタンス内に保持したい場合。

于 2013-03-29T20:53:04.263 に答える
0

クラス名から変数を呼び出す必要があるのはなぜですか。クラスが MainClass を拡張する場合は、parent::get_base_url(); を使用します。

于 2013-03-29T20:56:01.970 に答える