2010-04-21 100 views
1

我已經在程序風格上編了很多程序,並在這幾個月中決定去OOP。OOP和PHP有點困惑

我有點困惑OOP和PHP。比方說,我有我的數據庫中的類別表和頁表。我想做一個頁面類和一個類別類。

比方說,我將有一個頁面顯示有關該類別的信息,並且會有一個屬於該類別的頁面列表。我將如何以OOP方式實現這一點?

我以爲類別類將有一個屬性(數組),將包含它擁有的所有頁面。那麼那麼我就感到困惑。我是否應該有一種方法可以從數據庫中獲得所有具有正確categoryID的頁面,並且應該將所有行實例化爲一個Page對象?

或者我應該在Category-class中使用setPages方法,並且在Pages-class中使用getAllPages方法,並使用該方法將所有頁面設置爲Category-class。

哼,我失去了。 :D

+0

先學習oop並做到這一點,問題?在這裏問。 – Sarfraz 2010-04-21 11:48:37

+0

我很難理解與對象的關係。我的意思是我應該在對象本身中實現多少東西。就像將新頁面添加到類別中一樣,它應該放在category-class還是page-class中。 – PPPHP 2010-04-21 11:52:18

+0

php在這裏無關 – leonbloy 2010-04-21 12:05:24

回答

0

創建一個Page類。

創建一個Category類。其中一個屬性應該是一個名爲$ pages(或類似)的Page對象數組。

在Category類中創建一個名爲getPages()的方法,該方法將返回$ pages數組。如果你喜歡,這可以是一個「延遲加載」方法,當它被調用時從數據庫中獲取頁面並將它們緩存在$ pages屬性中。或者,可以在創建類別對象時加載所有頁面對象。你的來電。

如果您需要或想要,請在Category類中創建名爲setPages($newArray)的方法。應該使用這個方法用$ newArray參數的值覆蓋$ pages數組屬性。

setX()方法(傳統上)用於設置屬性的值,而不是啓動數據庫查找或其他數據生成方案。他們大多數時候會看起來像這樣:

public function setPages($newArray) 
{ 
    // data checking here to make sure $newArray is valid 
    $this->pages = $newArray; 
} 
+0

感謝您的回答,這對我有幫助。有很多方法可以做到,但我不知道什麼是正確的。 – PPPHP 2010-04-22 05:16:24

+0

..順便說一句,應該有一些處理所有類別的圖層...:D – PPPHP 2010-04-22 05:18:59

+0

我的意思是如果我想有類別列表。 – PPPHP 2010-04-22 06:23:16

0

面向對象的程序設計是一個很大的話題,它不像你想像的那樣具有語言特定性。

你有一個很好的PHP的OOP教程,我建議你去這裏看看: OOP Part 1OOP Part 2

PHP開發我會強烈建議你改用發展的OOP風格:

  1. 你會寫更少的代碼。
  2. 它會更容易維護。
  3. 這將更容易延伸。
1

您不必從數據庫加載所有頁面和數據。常見的解決方案是使用所謂的活動記錄。每個數據庫行一個對象。例如:

class Page 
{ 
var $id; 
var $title; 
var $txt; 
function __construct($id) {...} // load from database 
function save() {...} // save to database edited data 
} 

您可以創建一流的記錄,例如:

class Record 
{ 
var $tablename; // table name 
var $row; // associative array - represents a row from a database 

function __construct($tablename, $id) 
// standard use cases with database 
function save(); // will save a row to the database table 
function load(); // will retrieve a row from the database table 
function delete(); 
} 

用法:

$page = new Record('page', 10); 
echo $page['title']; 

這僅僅是例如非常簡單的解決方案。 有關更好的示例,請參見CodeIgniter活動記錄。

0

所以會是正確的,如果我會做這樣的:

例如:

$category = new Category(); 
$category->setPages(); // This would get all the pages (with the right categoryID) from the database and istantiate every row as an object to an array in the Category-class. 

然後我可以做這樣的:

foreach($category->getPages() as $page) { 
    echo $page->getName()."<br>"; 
}