0

依存性注入について読みましたが、よく理解できました。今、ちょっとした問題が発生しました。多くのクラス (メンバー、ゲーム、投稿など) を含む oop サイト構造を作成しています。多くの人が、この目的でグローバル変数を使用することはお勧めできないと言ったので、この小さな問題が発生しています。例えば:

$mysql_connection = ...connection
$members = new Members($mysql_connection); //i need to implement posts and games 
$posts = new Posts($mysql_connection); //i need to implement members
$games = new Games($mysql_connection); //i need to implement members

クラスを通過するためにグローバル変数を使用していたとき、クラスの順序はそれほど重要ではありませんでした:

global $connection;
$connection = ...connection

global $members;
$members = new Members();

global $posts;
$posts = new Posts();

etc...

クラスの例:

class Posts{

 function getMemberPosts($id){
    ...implementing the globals
    global $connection, $members;
    ...using the globals
 }

}

私の質問は、グローバルを使用せずに同じことを行うにはどうすればよいですか? (依存性注入である必要はありません..)

4

1 に答える 1

0

グローバルなものではなく、注入されたコンポーネントを保存して使用したい。

class Posts{
    protected $dbconnection;

    public function __construct($dbconn){
       // save the injected dependency as a property
       $this->dbconnection = $dbconn;
    }

    public function getMemberPosts($id, $members){
       // also inject the members into the function call

       // do something cool with members to build a query

       // use object notation to use the dbconnection object
       $this->dbconnection->query($query);
    }

}
于 2013-07-15T18:11:08.130 に答える