2010-04-21 64 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>"; 
}