多くの人が、プロジェクトを作成することは、プログラミングではなく、いくつかの既成のソリューションの統合コードを書くことよりも、多くの場合、ダウンすることに気づいたと思います。 そのような組み合わせは、その後のタスクで繰り返し使用できる新しいソリューションになる場合があります。
特定の「実行中の」タスク、つまりPHPでデータベースを操作するためのオブジェクトレイヤーに移りましょう。 PDOからマルチレベル(そして、私の意見では、PHPではまったく適切ではない)ORMエンジンに至るまで、多くのソリューションがあります。
これらのソリューションのほとんどは、他のプラットフォームからPHPに移行しました。 しかし、多くの場合、著者はPHPの機能を考慮に入れていません。PHPの機能は、移植性のある構成の記述と使用の両方を劇的に単純化します。
このクラスのタスクの一般的なアーキテクチャの1つは、アクティブレコードパターンです。 特に、いわゆるEntity(エンティティ)は、このテンプレートに従って構築され、EJB3の永続Beanから.NETのEFまで、多くのプラットフォームで何らかの形で使用されます。
それでは、PHP用に同様の構成を構築しましょう。 完成したADODBライブラリと、PHPオブジェクトの弱いタイピングと動的なプロパティの2つのクールなものを一緒に接続しましょう。
ADODBの多くの機能の1つは、データとの連想配列に基づいてレコードを挿入(INSERT)および更新(UPDATE)するための、いわゆるSQLクエリの自動生成です。
実際には、キーをフィールドの名前、値をデータとして、配列を取得し、SQLクエリ文字列を生成する軍事的なものはありません。 しかし、ADODBはより知的にそれを行います。 クエリは、以前にデータベーススキーマから読み取られたテーブルの構造に基づいています。 その結果、第一に、既存のフィールドのみがsqlに入り、すべてではなく、第二に、フィールドタイプが考慮されます-文字列に引用符が追加され、送信された値の文字列の代わりにADODBが見た場合、タイムスタンプに基づいて日付形式を形成できます。
それでは、PHPの側面から見ていきましょう。
このようなクラスを想像してください(簡略化)。
class Entity{ protected $fields = array(); public final function __set($name, $value) { $this->fields[$name] = $value; } public final function __get($name) { return $this->fields[$name]; } }
ADODB SQL , , XML . . , , , .
, .
Gist. , . , — , .
, :
CREATE TABLE `users` ( `username` varchar(255) , `created` date , `user_id` int(11) NOT NULL AUTO_INCREMENT, PRIMARY KEY (`user_id`) )
— ADODB .
, Entity
/** * @table=users * @keyfield=user_id */ class User extends Entity{ }
.
:
$user = new User(); $user->username=' '; $user->created=time(); $user->save(); // // $thesameuser = User::load($user->user_id); echo $thesameuser ->username;
.
( , view=usersview) , , . . getMetatada() .
Entity ?
, init(), Entity, .
afterLoad(), , timestamp .
.
/** * @table=users * @view=usersview * @keyfield=user_id */ class User extends Entity{ protected function init() { $this->created = time(); } protected function afterLoad() { $this->created = strtotime($this->created); } }
beforeSave beforeDelete , , — , .
( WHERE ).
$users = User::load("username like '' ");
Entity , «» SQL . , . , ( user_id, ), . , , , , . . EF -.
, AR. — . , Entity Manager .
— , , .
— PHP , ( Entity) -. , - .
? , , — , , , . , , ( 99.9%) . , , - .
P.S. GitHub