我已经为过程PHP编程了大约8年,终于开始学习OOPHP了。我看过很多教程,我理解语法,使用起来也很舒服。不过,我没有找到一个如何设置类文件结构的实用示例,以及如何从类中访问数据库以在其中执行查询。
我最初的想法是创建一个名为/class的单独文件夹,并为每个类创建一个文件。如果一个类扩展了另一个类,我将include()
子文件中的父文件。在我的主脚本中,我会根据需要调用类。例如CCD_ 2,当我需要它们的成员类时。
此外,我还编写了一个扩展mysqli的数据库类(我知道你们中的许多人会建议我使用PDO
,如果你有一些理由可以提供它们,尽管我会说我不希望永远不使用MySQL)。真正让我头疼的是如何打开类中的数据库连接。例如,我的想法是,在成员类中,我将传递一个member_id
,然后在类中执行一个查询,将其所有属性设置为成员的属性。最初,我在主脚本中包含了数据库类,并创建了它的一个实例,然后在成员类中将句柄声明为global(我读过global是如何邪恶的,无论如何我都不喜欢这个解决方案)。有什么更好的方法?
谢谢你的帮助!
首先,对于每个类都有单独的文件,这无疑是正确的。在这一点上,这几乎被认为是标准做法。我会研究类自动加载和spl_autoload_register
。我强烈建议首先设置一个自动加载器,相信我,当我说你真的不想在包含类文件之前进行无数次interface_exists
和class_exists
调用时。
第二,关于数据库调用。我在这里回答了一个类似的问题,但基本要点是创建一个数据库实例,并将其注入需要访问数据库的类中。至于mysqli
,如果这是你喜欢使用的,那就去吧。你没有使用旧的、不推荐使用的mysql_*
,这太棒了。
在我看来,学习OOP的最好方法是查看OOP之后已经存在的代码库。我建议查看Zend Framework API文档。如果它看起来对你有希望,下载该框架并开始练习
Zend Framework最酷的地方是,它可以用作自顶向下的MVC或独立库,并且在PHP社区中大量使用。
一些需要关注的事项:
- 类自动加载
- 类名如何与其各自的目录结构对齐
- 如何扩展类
- 接口
- 抽象类