構建自己的PHP架構--定義ORM的介面

來源:互聯網
上載者:User
在上一篇部落格中,我們抽象出了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實現之後的使用,據此我們可以定義出如下介面:

phpnamespace sf\db;interface ModelInterface{    publicstaticfunction tableName();    publicstaticfunction primaryKey();    publicstaticfunction findOne($condition);    publicstaticfunction findAll($condition);    publicstaticfunction updateAll($condition, $attributes);    publicstaticfunction deleteAll($condition);    publicfunction insert();    publicfunction update();    publicfunction 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

以上就介紹了構建自己的PHP架構--定義ORM的介面,包括了方面的內容,希望對PHP教程有興趣的朋友有所協助。

  • 聯繫我們

    該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

    如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

    A Free Trial That Lets You Build Big!

    Start building with 50+ products and up to 12 months usage for Elastic Compute Service

    • Sales Support

      1 on 1 presale consultation

    • After-Sales Support

      24/7 Technical Support 6 Free Tickets per Quarter Faster Response

    • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.