2014-02-25 41 views
1

我剛剛開始使用PHP中的OOPS來處理我的項目。並希望確保我學習項目的正確OOP方法。通過PHP在OOPS中執行CRUD操作的理想方式

我的班級是這樣的:

class user 
{ 
    //class variables 

    public function __construct 
    { 
     //initializes all class variables to null 
    } 

    public function setById($id) 
    { 
     //Queries Database for row matching $id and sets the class variables with 
     the same values as returned in result 
    } 

    public function setValues($array) 
    { 
     foreach($array as $key => $value) 
     { 
      $this->$key = $value;  
     } 
    } 

    public function update() 
    { 
     //updates the database table from the class variables 
    } 

    public function delete() 
    { 
     //deletes the row matching the class variable called id 
    } 
} 

現在的更新操作:

1)我會首先聲明的對象。 2)然後調用SetById()函數,使用參數作爲我希望更新的行的id。這將從數據庫中設置所有當前值。 3)然後將調用setValues()函數來更新類變量中的值。 4)然後調用update函數從類變量的值更新數據庫行。

這是在OOP方法中更新的正確方法嗎?

對於刪除操作:

1)我將首先聲明對象。 2)然後調用SetById()函數,使用參數作爲我希望更新的行的id。這將從數據庫中設置所有當前值。 3)然後調用delete函數刪除類變量中與id匹配的行。

這是正確的方法嗎?

回答

2

這取決於。您是否打算對該用戶做任何事情? (除了顯示它)?

如果你不這樣做,去Table Data Gateway模式。如果您確實有某種涉及用戶的邏輯,請參閱Data Mapper模式。

主要區別在於使用Table Data Gateway時,焦點在表格上(每個表格一個網關對象,允許您在該表上執行操作)。但是,使用數據映射器時,重點是域對象(即User對象),並且每個域類通常都有一個映射器類。 (即UserUserMapper)。

+0

感謝您的評論。我會研究你在這裏鏈接的兩種模式。但我的問題是:我的代碼是否違反任何OOP原則?根據面向對象的方法學是正確的? –

+0

@KanishkDudeja:是的。幾乎從來沒有'User'對象的工作將自己保存到永久存儲(數據庫)。兩者之間幾乎總是存在分離。 –

+0

好的。謝謝 :) –