繁体   English   中英

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

[英]Best OOP approach for this simple PHP app?

好的,我无法插入概览图像,但是我需要为我的学习创建一个PHP应用程序,它必须允许学生注册,并且管理员可以编辑课程和学生信息。 我们并不需要以OOP风格对其进行编码,但是由于它是使用OOP进行编码的最佳编程实践,因此为什么不从一开始就学习OOP。

我是一个初学者,但我了解有关OOP,类,继承,setter和getter的基础知识,以及所有很酷的术语,但是我在努力确定此应用程序的哪些部分应该是对象,应该开设课程和学生课程还是添加,编辑和删除类? 任何有关如何解决和可视化此类问题的建议将不胜感激。

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

  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()方法包含需要执行的操作的按钮)中调用Student and Course中的方法。 (让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");
   }

}

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

但是,如果您不熟悉OOP和SQL或XML,则可能会自己打开一罐蠕虫,最好仅使用函数和数据的php数组进行赋值。 除非你有时间学习...

从简单的角度来看:

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

学生(对象)被管理员(对象)删除(操作),因此

管理员课程将具有deleteStudent方法,因为管理员会删除学生。

另一个方法是将所有与学生相关的动作集中在学生类中:

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

任何以更好的解释方式认为这的人都可以编辑此Wiki。

想一想,您的系统中哪些方面实际上是对象,您可以做一些事情。 方法是您对对象执行的操作。 因此,您在课程和学生课程上走的路正确,添加,编辑和删除将是这些课程的方法。

但是不要太为之困惑。 如果这不是您的核心任务目标,则可以通过尝试以正确的方式做所有事情来迅速超越您的头脑。 如果您可以制定明确的方法到达需要去的地方,那么就去做吧,如果这似乎令人困惑,请退后一点,然后学更多。

您说您知道OOP的基础,但是问您是否应该创建课程,学生班级还是添加,删除,编辑班级。 好吧,也许还有其他做法,但我想最流行的一种,也是我所知道的唯一一种,就是使用名词作为类,将动词用作其方法。 因此,直观地讲,“添加”或“编辑”类出了问题。 如果我当时是我会做的,就是考虑所有可能被视为对象的“实体”,例如学生,课程,讲师,班级(房间),并根据模型的高级程度添加更多类似的内容。构建等。然后尝试实现一些基本的事情,例如创建新学生,注册课程,将老师与课程相关联等。一旦安装到位并且工作正常,您可能希望添加高级功能,例如继承。 例如,您可能想说老师和学生都是人,因此您可能想创建此类抽象类并使用继承。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM