2012-01-12 53 views
1

我已经编写了程序化PHP大约8年,并且最终开始学习OOPHP。我经历了很多很多教程,并且我理解使用它的语法和感觉非常舒适。然而,我找不到的是一个如何设置类文件结构的实际示例,以及如何从类中访问我的数据库以在其中执行查询。如何组织PHP中的类并从类内部访问数据库

我最初的想法是创建一个名为/ class的单​​独文件夹并为每个类创建一个文件。如果一个类扩展了另一个类,我会在子文件中的父文件include()。在我的主要脚本中,我会根据需要调用课程。例如include(/class/member.php)当我需要他们的会员类。我写了一个扩展mysqli的数据库类(我知道你们很多人会建议我用PDO来代替,如果你有一些理由为什么随意提供它们,虽然我会说我不期望永远不会使用MySQL)。真正抛出我的部分是如何在我的类中打开数据库连接。例如,我的想法是在成员类中,我会传递一个member_id,然后我会在类中执行一个查询来将其所有属性设置为该成员的属性。最初我将数据库类包含在我的主脚本中,并创建了它的一个实例,然后在我的成员类中声明句柄为全局的(我已经读过全局变量是邪恶的,我也不太喜欢这个解决方案)。什么是更好的方式来做到这一点?

感谢您的任何帮助!

回答

5

首先,你是defini按照每个班级的单独文件,在正确的轨道上进行操作。在这一点上,这几乎被认为是标准做法。我会查看class autoloadingspl_autoload_register。我强烈建议首先设置一个自动加载器,当我说你真的不想在包含你的类文件之前需要做无数个interface_existsclass_exists调用时,请相信我。

二,关于你的数据库调用。 I answered a similar question here但基本的要点是您创建单个数据库实例并将其注入需要数据库访问的类中。至于mysqli,如果这是你喜欢使用它。它真棒,你不使用旧的,不赞成mysql_*

5

在我看来,学习OOP的最好方法是查看已经存在的遵循OOP的代码库。我建议查看Zend Framework API Docs。如果它看起来很有希望,请下载framework并开始练习。

关于Zend Framework的一件很酷的事情是它可以用作自顶向下的MVC或独立库,并且在PHP社区中大量使用它。

有些事情要专注于:

  • 类自动加载
  • 类的名字怎么行了各自的目录结构
  • 如何类扩展
  • 接口
  • 抽象类