程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 網頁編程 >> PHP編程 >> 關於PHP編程 >> 構建自己的PHP框架--定義ORM的接口,構建php框架orm

構建自己的PHP框架--定義ORM的接口,構建php框架orm

編輯:關於PHP編程

構建自己的PHP框架--定義ORM的接口,構建php框架orm


在上一篇博客中,我們抽象出了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更新為published
Article::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實現之後的使用,據此我們可以定義出如下接口:

<?php
namespace sf\db;

interface ModelInterface
{
    public static function tableName();

    public static function primaryKey();

    public static function findOne($condition);

    public static function findAll($condition);

    public static function updateAll($condition, $attributes);

    public static function deleteAll($condition);

    public function insert();

    public function update();

    public function delete();
}

該文件放在src/db文件夾下,這是我目前想到的最簡單的接口,可能會有所遺漏,我們會在開發的時候不斷完善。暫時我們會先按照這個實現。

這是一個接口,之後我們會有一個BaseModel類實現這個接口,然後所有的Model都繼承BaseModel去實現。

 

好了,今天就先到這裡。項目內容和博客內容也都會放到Github上,歡迎大家提建議。

code:https://github.com/CraryPrimitiveMan/simple-framework/tree/0.4

blog project:https://github.com/CraryPrimitiveMan/create-your-own-php-framework

 

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved