如何在PHP中组织类并从类中访问数据库

And*_*own 1 php database oop class filestructure

我已经编写了程序PHP大约8年,最后我开始学习OOPHP.我已经阅读了很多教程,并且我理解语法并且使用它非常舒服.但是,我找不到的是一个如何设置类文件结构的实际示例,以及如何从类中访问我的数据库以在其中执行查询.

我最初的想法是创建一个名为/ class的单​​独文件夹,并为每个类创建一个文件.如果一个类扩展了另一个类,我会将include()子文件中的父文件.在我的主要脚本中,我会调用类,因为我需要它们.例如,include(/class/member.php)当我需要他们成员班.

另外,我写了一个扩展mysqli的数据库类(我知道很多人会建议我使用PDO,如果你有一些理由为什么随意提供它们,虽然我会说我不希望永远不使用MySQL) .真正让我失意的部分是如何在我的课程中打开数据库连接.例如,我的想法是在我将传递的成员类中member_id,然后我将在类中执行查询以将其所有属性设置为成员的属性.最初我在我的主脚本中包含了数据库类并创建了它的实例,然后在我的成员类中将句柄声明为全局(我已经读过全局变量是邪恶的,我还是不喜欢那个解决方案).有什么更好的方法呢?

谢谢你的帮助!

Mik*_*ell 5

在我看来,学习OOP的最好方法是查看已经存在的跟随OOP的代码库.我建议查看Zend Framework API文档.如果它看起来很有希望,请下载框架并开始练习.

关于Zend Framework的一个很酷的事情是它可以用作自上而下的MVC,或者是一个独立的库,并且在PHP社区中被大量使用.

有些事情要集中在:

  • 类自动加载
  • 类名如何与其各自的目录结构对齐
  • 如何扩展课程
  • 接口
  • 抽象类


Cha*_*rry 5

首先,你肯定在每个班级的单独文件的正确轨道上.在这一点上,这几乎被认为是标准做法.我会研究类自动加载spl_autoload_register.我强烈建议首先设置一个自动加载器,相信我,当我说你真的不想做无数次interface_exists并且class_exists在你包括你的类文件之前打电话.

第二,关于你的数据库调用.我在这里回答了一个类似的问题,但基本要点是你创建一个数据库实例并将其注入需要数据库访问的类中.至于mysqli,如果这是你喜欢用它去做它.它很棒,你没有使用旧的,不赞成使用mysql_*.