我该如何设置课程?

BDu*_*elz 0 php mysql oop organization

我开始使用oop来构建用户生成数据的站点.

我的课程有不同类型的数据.我有从数据库中获取数据列表的函数,以及从这些列表中选择一个项目的函数.例如

function Get_Article($aid); //Gets an article
function Get_Users_Articles($uid); //Gets a multidemsional array of the users 
                                   //articles
function Get_Latest_Articles(); //Self explanatory by now
function Get_Local_Articles($zip); //Gets articles written by local users
function Get_Local_Users($zip); //Gets all local users

function Get_All_Article_Comments($aid); //Gets a multidimensional array of the 
                                     //comments written for an article
function Get_Article_Comment($cid); //Gets a single article comment
Run Code Online (Sandbox Code Playgroud)

现在,我应该如何设置我的类来组织这些功能.我应该将它们全部放在同一个类中,还是应该从文章中分离出来的评论,或者分离从检索文章/评论列表的那些文章/评论中检索单个文章/评论的函数.我可能会在以后添加更多内容以允许评论,所以我想考虑从其他人那里分离所有评论功能.此外,"本地"函数都使用相同的函数执行数学运算,所以我应该将它们组合在一起,或者只是使用继承...任何建议???

关于oop的主题,我有一个看起来像... private $ user = array();

public function Get_User_Data($uid){
  //get user data from database
  return $this->user;
}

public function Set_User_Data($user_array){
  $this->user = $user_array;
}

public function Add_User(){
  //INSERT data from $this->user into the database 
}
Run Code Online (Sandbox Code Playgroud)

现在有没有人看到它看起来有什么问题,主要是,我应该将user_data设置为Add_User函数的参数,而不是插入成员变量?

Noa*_*ich 6

首先,你需要理解的是,采用旧的过程样式函数并将它们包装在对象中并不会使代码面向对象,这只意味着你正在编写更复杂,更丑陋的过程代码.

其次,我强烈建议,实际上我在建议中不能太费劲,你需要花一些时间来至少研究那里的各种PHP框架.虽然您可能永远不会使用它们中的任何一种,但我觉得非常安全地保证学习其中任何一项都能让您更好地掌握面向对象的原则和一般的良好应用程序设计.如果你以前从未见过,以下内容应该给出一个开始的地方:

  • Zend框架
  • Symfony的
  • CakePHP的
  • 太阳能框架

此外,如果您从未听说过Martin Fowler或企业应用程序架构模式,我强烈建议您尝试选择副本.他从字面上写了这本书,它提供了在每个流行的Web框架中使用的基本模式.

我的'阅读手动回复'非常多:-P

在您的特定情况下,我将从基本的Active Record模式开始,以包含您的数据库访问逻辑和域逻辑.在这种类型的模式中,每个数据库表(用户,文章,注释)由离散对象表示.用户的基本Active Record类将包含获取特定用户或用户列表的所有功能,以及插入,更新或删除用户的功能.此外,User Active Record类将包含加载用户文章和注释的方法.

shell User类可能如下所示:

class User extends Active_Record {

public function find() {}

/**
    Single function performs inserts and updates for the object
**/
public function save() {}

public function delete() {}

public function getArticles() {}

public function getComments() {}
}
Run Code Online (Sandbox Code Playgroud)