2011-07-09 2 views
1

さて、私はクラスとメソッドを記述し、それらを拡張する基本のハングアップを持っています。php - オブジェクトが親オブジェクトメソッドを参照することは可能ですか?

私は、可能性のあるすべてのメソッドを持つ大規模なクラスを簡単に作成することができます。しかし、物事は管理しにくくなってきています。

「モジュール」を分離したままにして、必要なときにのみ起動できるように、次のコードを実行できるかどうか疑問に思っています。達成:

// user/member handling methods "module" 
class db_user 
{ 
    public function some_method() 
    { 
     // code that requires parent(?) objects get_something() method 
    } 
} 

// post handling methods "module" 
class db_post 
{ 
    public function some_method() 
    { 
     // code that requires parent(?) objects update_something() method 
    } 
} 

class db_connect() 
{ 
    public $db_user; 
    public $db_post; 

    public function __construct() 
    { 
     // database connection stuff 
    } 
    public function __destruct() 
    { 
     // blow up 
    } 

    // if i want to work with user/member stuff 
    public function set_db_user() 
    { 
     $this->db_user = new db_user(); 
    } 

    // if i want to work with posts 
    public function set_db_post() 
    { 
     $this->db_post = new db_post(); 
    } 

    // generic db access methods here, queries/updates etc. 
    public function get_something() 
    { 
     // code to fetch something 
    } 

    public function update_something() 
    { 
     // code to fetch something 
    } 
} 

をだから私は、新しい接続オブジェクトを作成します。

$connection = new db_connect(); 

のユーザーと作業する必要があるので...

$connection->set_db_user(); 
$connection->db_user->some_method(); 

そして今、私は誰かがここで私を助けることを願ってポストに何かをする必要がありそう..

$connection->set_db_post(); 
$connection->db_post->some_method(); 
$connection->db_post->some_other_method(); 

、私は数日のために検索してきたが、以外の任意の情報を見つけるように見えることはできません基本的にすべてを1つのクラスにまとめたり、無限の拡張機能をつくることができます。これは有用なことではありません。

私の謝罪これは何とか全くばかげている場合 - 私はあなたがDB_USER/db_postコンストラクタにインスタンスをdb_connectとフィールド$parentにそれを保存するための参照を渡すことができます。..

+1

私が正しく理解しているなら、それは "親"メソッドではなくr 「コンテナ」メソッドを使用します。オプションには 'db_connect'(ラッパーとして)のメソッドを介してアクセスを公開し、接続オブジェクトを渡すか、' db_user/db_post'オブジェクトを作成するときに 'db_connect'オブジェクトを渡します。ハッピーコーディング。 –

答えて

2

パスdb_connection

class db_user 
{ 
    protected $db; 

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

    public function some_method() 
    { 
     // code that requires parent(?) objects update_something() method 
     $this->db->update_something(); 
    } 
} 

用途:

$db = new db_connection(); 
$user = new db_user($db); 
$user->some_method() 

db_connectは、set_db_postset_db_userなどこれは、DBへの接続処理する必要があり、おそらくいくつかの一般的な選択ではないはずです/ update/insert/deleteのメソッド

+0

私はこれがまさに私が探しているものだと思います。いつものように何かについてあまりにも難しいと思われてしまって、ばかげた道をさまよってしまいました。 –

2

すべての後に初心者です。 db_*クラスに

+0

私はこの同じ応答を入力していました。間違いなく、既存のコードを使用するための最も簡単なルートです。 – bioneuralnet

+1

注:この方法でサイクルリンクを取得するので、アプリケーションが停止するまで、デストラクタは呼び出されません。ほとんどの場合、それは問題ありません。 –

+1

'parent'はこのフィールドの名前が間違っています。 – Michas

関連する問題