构建自己的php框架

在上一篇博客中,我们抽象出了controller的基类,实现了页面的渲染和返回json字符串的功能。

那作为一个框架,我们现在还缺少什么?是的,大家应该已经注意到了,我们在这之前从来没有连接过数据库,我们缺少一个orm(object relational mapping)。

在php中连接mysql有三种方式,分别是使用原生函数、mysqli扩展和pdo扩展,详细内容可以查看我之前的博客《php的学习–连接mysql的三种方式》。

我们要选择哪一种呢?考虑到作为一个框架不能仅支持一种数据库,我们就选择使用pdo。当然如果你确定你的框架只需要连接mysql数据库,也可以考虑使用mysqli。

pdo支持如下的数据库:

cubrid (pdo)ms sql server (pdo)firebird (pdo)ibm (pdo)informix (pdo)mysql (pdo)ms sql server (pdo)oracle (pdo)odbc and db2 (pdo)postgresql (pdo)sqlite (pdo)4d (pdo)

当然,这些数据库即使都可以使用pdo去连接使用,但在某些具体的情况下,还是有些许不同的,详情可参考pdo文档

鉴于我电脑现在只安装了mysql,之后的code,只会测试mysql数据库,不会测试其他数据库。

首先我们会将这些内容放在src/db文件夹中,我们需要定义一下接口,这里我们会先安最简单的来。

我们需要实现什么?最简单的就是数据的增删改查。

假设我们现在有一张article表,一个与之对应的model article,我们希望怎么用它呢?

// 选出id为1的一篇文章$article = article::findone([‘id’ => 1]);
// 选出status是unpublished的所有文章$articles = article::findall([‘status’ => ‘unpublished’]);
// 将id为1的所有文章的status更新为publishedarticle::updateall([‘id’ => 2], [‘status’ => ‘published’]);
// 删除所有id为1的文章article::deleteall([‘id’ => 2]);
// $article是之前选出的id为1的文章
// 更新它的属性status为unpublished$article->status = ‘unpublished’;
// 保存更新到数据库$article->update();
// 删除该文章$article->delete();
// 创建一个新文章$article = new article();
$article->name = ‘my first article’;
$article->status = ‘published’;
// 将该文章保存到数据库中$article->insert();

大概在上面列了一下,我们简单的orm实现之后的使用,据此我们可以定义出如下接口:

Posted in 未分类