ホームページ  >  記事  >  バックエンド開発  >  独自の PHP フレームワークを構築 - ORM のインターフェイスを定義

独自の PHP フレームワークを構築 - ORM のインターフェイスを定義

WBOY
WBOYオリジナル
2016-06-13 12:28:49831ブラウズ

独自の PHP フレームワークを構築する - ORM インターフェイスを定義する

前回のブログでは、Controller の基本クラスを抽象化し、ページのレンダリングと JSON 文字列を返す機能を実装しました。

フレームワークとして、今何が欠けているのでしょうか?はい、これまでデータベースに接続したことがなく、ORM (オブジェクト リレーショナル マッピング) が欠如していることに誰もが気づいたはずです。

PHP で MySQL に接続するには、ネイティブ関数、mysqli 拡張機能、PDO 拡張機能を使用する 3 つの方法があります。詳細については、私の以前のブログ「PHP の学習 - MySQL に接続する 3 つの方法」を参照してください。 。

どれを選ぶべきですか?フレームワークとして 1 つのデータベースのみをサポートすることはできないことを考慮し、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 および DB2 (PDO)
  • PostgreSQL (PDO)
  • SQLite (PDO)
  • 4D (PDO)

もちろん、これらのデータベースは PDO を使用して接続できる場合でも、特定のケースでは若干異なります。詳細については、PDO ドキュメントを参照してください。

私のコンピューターには現在 mysql しかインストールされていないため、次のコードを使用します。 mysql データベースのみをテストし、他のデータベースはテストしません。

まず、これらのコンテンツを src/db フォルダーに配置します。ここでは、最初に最も単純なものをインストールします。

何を達成する必要があるでしょうか?最も単純なのは、データの追加、削除、変更、クエリです。

記事テーブルと対応するモデル記事があるとします。それをどのように使用したいでしょうか。

<span style="color: #008000;">//</span><span style="color: #008000;"> 选出id为1的一篇文章</span><span style="color: #800080;">$article</span> = Article::findOne(['id' => 1<span style="color: #000000;">]);</span><span style="color: #008000;">//</span><span style="color: #008000;"> 选出status是unpublished的所有文章</span><span style="color: #800080;">$articles</span> = Article::findAll(['status' => 'unpublished'<span style="color: #000000;">]);</span><span style="color: #008000;">//</span><span style="color: #008000;"> 将id为1的所有文章的status更新为published</span>Article::updateAll(['id' => 2], ['status' => 'published'<span style="color: #000000;">]);</span><span style="color: #008000;">//</span><span style="color: #008000;"> 删除所有id为1的文章</span>Article::deleteAll(['id' => 2<span style="color: #000000;">]);</span><span style="color: #008000;">//</span><span style="color: #008000;"> $article是之前选出的id为1的文章// 更新它的属性status为unpublished</span><span style="color: #800080;">$article</span>->status = 'unpublished'<span style="color: #000000;">;</span><span style="color: #008000;">//</span><span style="color: #008000;"> 保存更新到数据库</span><span style="color: #800080;">$article</span>-><span style="color: #000000;">update();</span><span style="color: #008000;">//</span><span style="color: #008000;"> 删除该文章</span><span style="color: #800080;">$article</span>-><span style="color: #000000;">delete();</span><span style="color: #008000;">//</span><span style="color: #008000;"> 创建一个新文章</span><span style="color: #800080;">$article</span> = <span style="color: #0000ff;">new</span><span style="color: #000000;"> Article();</span><span style="color: #800080;">$article</span>->name = 'My first article'<span style="color: #000000;">;</span><span style="color: #800080;">$article</span>->status = 'published'<span style="color: #000000;">;</span><span style="color: #008000;">//</span><span style="color: #008000;"> 将该文章保存到数据库中</span><span style="color: #800080;">$article</span>->insert();

はおそらく上にリストされており、単純な ORM 実装後の使用法に基づいて次のインターフェースを定義できます:

<?<span style="color: #000000;">phpnamespace sf\db;</span><span style="color: #0000ff;">interface</span><span style="color: #000000;"> ModelInterface{    </span><span style="color: #0000ff;">public</span> <span style="color: #0000ff;">static</span> <span style="color: #0000ff;">function</span><span style="color: #000000;"> tableName();    </span><span style="color: #0000ff;">public</span> <span style="color: #0000ff;">static</span> <span style="color: #0000ff;">function</span><span style="color: #000000;"> primaryKey();    </span><span style="color: #0000ff;">public</span> <span style="color: #0000ff;">static</span> <span style="color: #0000ff;">function</span> findOne(<span style="color: #800080;">$condition</span><span style="color: #000000;">);    </span><span style="color: #0000ff;">public</span> <span style="color: #0000ff;">static</span> <span style="color: #0000ff;">function</span> findAll(<span style="color: #800080;">$condition</span><span style="color: #000000;">);    </span><span style="color: #0000ff;">public</span> <span style="color: #0000ff;">static</span> <span style="color: #0000ff;">function</span> updateAll(<span style="color: #800080;">$condition</span>, <span style="color: #800080;">$attributes</span><span style="color: #000000;">);    </span><span style="color: #0000ff;">public</span> <span style="color: #0000ff;">static</span> <span style="color: #0000ff;">function</span> deleteAll(<span style="color: #800080;">$condition</span><span style="color: #000000;">);    </span><span style="color: #0000ff;">public</span> <span style="color: #0000ff;">function</span><span style="color: #000000;"> insert();    </span><span style="color: #0000ff;">public</span> <span style="color: #0000ff;">function</span><span style="color: #000000;"> update();    </span><span style="color: #0000ff;">public</span> <span style="color: #0000ff;">function</span><span style="color: #000000;"> delete();}</span>

このファイルは src/db フォルダーに配置されています。これは私が考える限り最も単純なインターフェースです。いくつかの省略があるかもしれませんが、開発中に引き続き改善していきます。とりあえずはこれを先に実装してみます。

これはインターフェースです。後でこのインターフェースを実装する BaseModel クラスを作成し、すべてのモデルが BaseModel を継承して実装します。

さて、今日はここまでにしましょう。プロジェクトの内容やブログの内容も Github に載せる予定ですので、皆様からのご提案をお待ちしております。

コード: https://github.com/CraryPrimitiveMan/simple-framework/tree/0.4

ブログプロジェクト: https://github.com/CraryPrimitiveMan/create-your-own- php-framework

1Fかくれんぼ 66
素晴らしい文章です!ブロガーの皆さん、私たちはブロガーが自分のブログを宣伝できるように、Peer Talk というアプリを作成しました。記事のリンクをコピーして公開すると、より多くのプログラマーに見てもらえるようになります。ぜひ試してみて、一緒に共有する精神を促進してください。 🎜>
声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。