ホームページ >バックエンド開発 >PHPチュートリアル >独自の PHP フレームワークを構築 - ORM のインターフェイスを定義
独自の PHP フレームワークを構築する - ORM インターフェイスを定義する
前回のブログでは、Controller の基本クラスを抽象化し、ページのレンダリングと JSON 文字列を返す機能を実装しました。
フレームワークとして、今何が欠けているのでしょうか?はい、これまでデータベースに接続したことがなく、ORM (オブジェクト リレーショナル マッピング) が欠如していることに誰もが気づいたはずです。
PHP で MySQL に接続するには、ネイティブ関数、mysqli 拡張機能、PDO 拡張機能を使用する 3 つの方法があります。詳細については、私の以前のブログ「PHP の学習 - MySQL に接続する 3 つの方法」を参照してください。 。
どれを選ぶべきですか?フレームワークとして 1 つのデータベースのみをサポートすることはできないことを考慮し、PDO を使用することにしました。もちろん、フレームワークが mysql データベースに接続するだけで十分であることがわかっている場合は、mysqli の使用を検討することもできます。
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