类和数据库

时间:2015-11-16 11:55:10

标签: php oop

我有一个名为Core()的课程,它几乎管理着我的网站。它处理路由,标题,正文,页脚等以及所有文件/数据库/身份验证(登录/注销)访问。

到目前为止,效果很好。我在index.php所要做的就是以下内容:

$core = new Core();
$core->render();

将呈现正确的页面。

我的问题在于数据库。我目前将Core()使用的PDO数据库类作为特征,从单独的文件加载。

所以在Core::__construct我必须手动启动(将会是)数据库的__construct函数:

$this->database_initialize();

使用给定的凭据连接到数据库。

我遇到的问题是有时我需要使用其他类,他们还需要访问数据库。现在,如果我需要在网站的其中一个页面上运行一个select语句,我只需执行以下操作:

$this->select("SELECT foo FROM bar;");

这很简单,也是我使用Database();作为trait的部分原因 - 否则我必须写$this->db->select("SELECT foo FROM bar {{ 1}}我并不想一直输入愚蠢的变量。 (在我转移到整个OOP系统之前,我只是输入");这很好而且很快。)

所以,让我说我想在我的一个页面上加载一个类,我会做以下事情:

$table = select("");

那很好,但是如何让该类访问已经加载的$form = New Form();数据库?因为在课堂内$core我不能写:

Form

因为课程$data = $this->select("");没有Form功能。在select()课程中,我也尝试Form,但不知道$data = $core->select("")是谁或是什么。

很少帮忙?

1 个答案:

答案 0 :(得分:4)

对于有名为Core的班级的初学者来说,这是一个巨大的代码味道。你的下一句话也清楚说明了这一点:

  

这几乎管理着我的网站。它处理路由,标题,正文,页脚等以及所有文件/数据库/身份验证(登录/注销)访问。

这意味着你基本上只有一个类负责一切,然后是一些。这意味着你可以通过将它包装在一个类中来获得任何东西。

  

我的问题在于数据库。我目前将我的PDO数据库类(Core()用作特征,从单独的文件加载。

使用特征的原因是什么(为此)?

  

否则我将不得不写$ this-> db-> select(“SELECT foo FROM bar”);而且我不喜欢一直打出愚蠢的变量

坦率地说,这是我今天听到的最愚蠢的事情,也是走上这条路或其他路线的可怕理由。

如果需要数据库连接,请将其传递到:

$dbConnection         = new \PDO('{dsn}', 'user', 'pass');
$somethingThatNeedsDb = new SomethingThatNeedsDb($dbConnection);
  

没关系,但是如何让该类访问已经加载的$ core数据库?

你没有。你也以需要它的形式传递它:

$dbConnection         = new \PDO('{dsn}', 'user', 'pass');
$theForm              = new Form($dbConnection);
$somethingThatNeedsDb = new SomethingThatNeedsDb($dbConnection);