我有一个名为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("")
是谁或是什么。
很少帮忙?
答案 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);