这个简单的PHP应用程序的最佳OOP方法?

时间:2012-03-25 18:49:28

标签: php mysql oop

好的,我无法插入概述图片,但我需要为我的学习创建一个PHP应用程序,它必须允许学生注册,管理员才能编辑课程和学生信息。 我们不需要以OOP样式编写代码,但由于它是用OOP编写代码的最佳编程实践,为什么不从头开始学习OOP。

我是初学者,但我知道有关OOP,类,继承,设置器和getter以及所有酷炫术语的基础知识,但是我很难决定这个应用程序的哪些部分应该是对象,我应该编写课程和学生课程或添加,编辑和删除课程?任何有关如何处理和可视化此类问题的建议都将受到赞赏。

4 个答案:

答案 0 :(得分:5)

非常粗略:我就是这样做的:

  1. 以SQL或XML格式存储数据。您将需要两个SQL表,一个用于学生,一个用于课程。您可以使用一个包含所有数据的XML文件,也可以使用两个文件(我推荐)。

  2. 创建一个名为dataItem的类,其属性类似于'$ arr_fields',对应于单个数据记录(SQL表中的单行或XML记录)。

  3. dataItem类应具有以下方法(全部公开):

    • loadFromSQL()(或loadFromXML()
    • saveToSQL()(或saveToXML())
    • add()edit()delete()
    • 使用HTML的view()方法
    • 这些方法显然用于在类的SQL / XML数据和$ arr_fields之间读写数据,并在$ arr_fields中显示数据。 $ arr_fields的键是特定SQL表的SQL列名(或XML标记或属性名)。
  4. 尽量不要在构造函数中或在用于仅修改类数据的任何其他方法中调用loadFromSQL()或saveToSQL()。将这些行为分开。编辑:这是个人偏好,可以帮助我跟踪对象的状态。

  5. 创建扩展dataItem类的Student和Course类。

  6. 如果需要,可以在扩展类中覆盖方法,例如view()方法。

  7. 然后,您可以从Admin对象(如rcdmk建议)调用学生和课程中的方法,也可以从StudentFolder和CourseFolder类中调用其方法,其view()方法包含需要执行的操作的按钮。 (让StudentFolder和CourseFolder扩展您创建的Folder类。)

  8. 更新:

    例如:如果SQL表中的主键是id,那么dataItem的loadFromSQL($ id,$ tablename)应该设置$ arr_fields,以便它的键是列名,它的值是来自的值主要值等于$ id的行。

    在学生中,您可以按如下方式覆盖loadFromSQL():

    class Students extends dataItem {
    
      // other attributes 
    
       public function loadFromSQL($id) {
         parent::loadFromSQL($id, "Students");
       }
    
    }
    

    编辑:重新考虑时,最好设置$ arr_fields [“id”] = $ id并使用dataItem的构造函数设置$ tablename - 然后你永远不必覆盖loadFromSQL()或为它指定参数。然后loadFromSQL()应该加载记录(如果存在)。如果设置了$ arr_fields [“id”],saveToSQL()应该在SQL中保存$ arr_fields,如果未设置则创建新记录。无论如何,你必须找到一种与适合你的数据交互的一致方式,这些只是可能性。

    但是,如果您对OOP和SQL或XML没有经验,那么您可能会为自己打开一堆蠕虫,最好只使用函数和php数组为您的数据执行任务。除非你有时间学习......

答案 1 :(得分:2)

从简单的角度来看:

将主要对象抽象为类,并使用此对象的操作方法:

管理员(对象)删除(操作)学生(对象),所以

管理员类将采用deleteStudent方法,因为管理员会删除学生。

另一个问题是将所有与学生相关的行动集中在学生班上:

学生班将使用管理员可以使用的public delete方法。

任何以更好的解释方式思考的人都可以编辑此维基。

答案 2 :(得分:2)

考虑一下系统的哪些方面实际上是对象,你知道,你可以做些什么。这些方法就是你对对象所做的。所以,你在课程和学生班的正确轨道上,添加,编辑和删除将是这些课程的方法。

但不要陷入困境。如果这不是您的核心任务目标,那么您可以通过尝试以正确的方式完成所有事情来快速掌控。如果你可以制定一个明确的方式来到达你需要去的地方,那就去吧,如果它看起来很混乱,那就稍微退一步再学习一些。

答案 3 :(得分:2)

你说你知道OOP的基础,但是你问是否应该创建课程,学生课程或添加,删除,编辑课程。好吧也许有其他的做法,但我想最流行的一个,我唯一知道的是使用名词作为类和动词作为他们的方法。因此,直观地说“添加”或“编辑”类有问题。如果我是的话,我会做的就是想到所有可能被视为对象的“实体” - 比如学生,课程,讲师,班级(房间),并且根据你的模型的高级程度,你可以添加更多像然后尝试实施基本的东西,如创建新学生,注册课程,将教师与课程相关联等。一旦你有了它并且它正在工作你可能想要添加高级的东西,像继承。例如,您可能想说,教师和学生都是Person,因此您可能希望创建此类抽象类并使用继承。