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

gra*_*per 0 php mysql oop

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

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

Ste*_*fan 5

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

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

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

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

    • loadFromSQL()(或loadFromXML())
    • saveToSQL()(或saveToXML())
    • add(),edit()delete()
    • 一种view()使用HTML 的方法
    • 这些方法显然用于在类的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类).

更新:

例如:如果SQL表中的主键是id,则dataItem的loadFromSQL($ id,$ tablename)应该设置$ arr_fields,使其键是列名,它的值是主值等于的行中的值. $ ID.

在学生中,您可以覆盖loadFromSQL(),如下所示:

class Students extends dataItem {

  // other attributes 

   public function loadFromSQL($id) {
     parent::loadFromSQL($id, "Students");
   }

}
Run Code Online (Sandbox Code Playgroud)

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

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