大致来说:这是我会怎么做:
存储在SQL或XML数据。您需要两个SQL表格,一个用于学生,另一个用于课程。您可以使用一个包含所有数据的XML文件,也可以使用两个文件(我推荐)。
与像一个属性创建一个名为类,例如,dataItem
“$ arr_fields”对应于单个数据记录(在SQL表中的一行,或XML记录)。
的DataItem的类应该有以下方法(所有公共):
loadFromSQL()
(或loadFromXML()
)
- saveToSQL()(或saveToXML())
add()
,edit()
和delete()
- a
view()
使用HTML的方法
- 这些方法显然是你的sed在SQL/XML数据和类的$ arr_fields之间读取和写入数据,并在$ arr_fields中显示数据。 $ arr_fields的键是特定SQL表的SQL列名称(或XML标记或属性名称)。
尽量不要在构造函数或其他任何用于修改类数据的方法中调用loadFromSQL()或saveToSQL()。保持这些行为分开。编辑:这是一个个人喜好,它可以帮助我跟踪我的对象的状态。
创建扩展dataItem类的Student和Course类。
如果需要,您可以在扩展类中覆盖方法,例如view()
方法。
然后,您可以从管理对象(如rcdmk建议)或可能从StudentFolder和CourseFolder类中调用学生和课程中的方法,其中的view()方法包含需要执行的操作的按钮。 (让StudentFolder和CourseFolder扩展您创建的Folder类)。
UPDATE:
例如:如果在一个SQL表的主键是id
,那么的DataItem的loadFromSQL($ ID,$表名)应该设置$ arr_fields以便其键列名和它的值是来自主要值等于$ id的行的值。
学生,则可以覆盖loadFromSQL()如下:
class Students extends dataItem {
// other attributes
public function loadFromSQL($id) {
parent::loadFromSQL($id, "Students");
}
}
编辑:复议,它可能是最好设置$ arr_fields [ “ID”] = $ ID,也可以设置$表名用dataItem的构造函数 - 那么你不必重载loadFromSQL()或为它指定参数。 loadFromSQL()应该随后加载记录(如果存在)。如果设置了$ arr_fields [“id”],saveToSQL()应该在SQL中保存$ arr_fields,如果未设置,则创建新记录。无论如何,您必须找到与您的数据交互的一致方式,这些只是可能性。但是,如果您对OOP和SQL或XML没有经验,那么您可能会为自己打开一堆蠕虫,而仅使用函数和php数组来处理您的数据可能更好。除非你有一些时间学习...
“它是编程OOP的最佳编程实践” - 说谁? – 2012-03-25 18:53:39
阅读这两本书http://www.amazon.com/Clean-Code-Handbook-Software-Craftsmanship/dp/0132350882和http://www.amazon.com/Applying-Introduction-Object-Oriented-Iterative-Development/dp/B003MV55EA/ref = sr_1_76?s = books&ie = UTF8&qid = 1332549040&sr = 1-76 – Songo 2012-03-25 18:54:30
@OliCharlesworth好的,在我收到的书中解释说,大多数语言都是朝着OOP方向发展,这可能不是最佳实践,但而是我的技能的一个很好的补充。 – grasshopper 2012-03-25 18:58:27