2011-07-09 186 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

如果我理解正確...它不是「父」方法,但r ather「容器」方法。對於選項,通過'db_connect'中的方法(作爲包裝)和傳遞連接對象來暴露訪問,或者當創建'db_user/db_post'對象時,傳入''包含「它們的'db_connect'對象。快樂的編碼。 – 2011-07-09 17:03:51

回答

2

db_connectiondb_*類:

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_userset_db_post等,應當予以受理連接到數據庫,也許一些通用選擇/更新/插入/刪除方法

+0

我認爲這正是我所尋找的,像往常一樣,我似乎對某件事情有太多的想法,結果徘徊在一條荒謬的道路上:) –

2

你可以傳遞一個參考db_connect到例如DB_USER/db_post構造函數,並將其存儲到現場$parent

+0

我剛剛輸入了相同的迴應。絕對是使用現有代碼的最簡單途徑。 – bioneuralnet

+1

注意:以這種方式獲得循環鏈接,因此在應用程序停止之前不會調用析構函數。在大多數情況下,這沒關係。 –

+1

「父母」對這個字段來說是相當錯誤的名字。 – Michas

相關問題