おめでとう、同僚! 3日前、PHP用の最も強力なORMフレームワークの3番目のアルファバージョン:Doctrineが本日リリースされました。
Doctrine 2.0では以前のバージョンと比較して非常に大きな変更があったため、このニュースは概して注目に値します。 すぐにこれらのグッズが必要になることに気付くでしょう-PHP 5.3のサポート。
Doctrine 2.0の公式ティーザーは次のようになります。
<?php namespace Doctrine\Tests\Models\CMS; /** <br/> * @DoctrineEntity(tableName="cms_articles") <br/> */ class CmsArticle { /** <br/> * @DoctrineId <br/> * @DoctrineColumn(type="integer") <br/> * @DoctrineIdGenerator("auto") <br/> */ public $id ; /** <br/> * @DoctrineColumn(type="varchar", length=255) <br/> */ public $topic ; /** <br/> * @DoctrineColumn(type="varchar") <br/> */ public $text ; /** <br/> * @DoctrineManyToOne(targetEntity="Doctrine\Tests\Models\CMS\CmsUser", <br/> joinColumns={"user_id" = "id"}) <br/> */ public $user ; /** <br/> * @DoctrineOneToMany(targetEntity="Doctrine\Tests\Models\CMS\CmsComment", mappedBy="article") <br/> */ public $comments ; }
<?php namespace Doctrine\Tests\Models\CMS; /** <br/> * @DoctrineEntity(tableName="cms_articles") <br/> */ class CmsArticle { /** <br/> * @DoctrineId <br/> * @DoctrineColumn(type="integer") <br/> * @DoctrineIdGenerator("auto") <br/> */ public $id ; /** <br/> * @DoctrineColumn(type="varchar", length=255) <br/> */ public $topic ; /** <br/> * @DoctrineColumn(type="varchar") <br/> */ public $text ; /** <br/> * @DoctrineManyToOne(targetEntity="Doctrine\Tests\Models\CMS\CmsUser", <br/> joinColumns={"user_id" = "id"}) <br/> */ public $user ; /** <br/> * @DoctrineOneToMany(targetEntity="Doctrine\Tests\Models\CMS\CmsComment", mappedBy="article") <br/> */ public $comments ; }
<?php namespace Doctrine\Tests\Models\CMS; /** <br/> * @DoctrineEntity(tableName="cms_articles") <br/> */ class CmsArticle { /** <br/> * @DoctrineId <br/> * @DoctrineColumn(type="integer") <br/> * @DoctrineIdGenerator("auto") <br/> */ public $id ; /** <br/> * @DoctrineColumn(type="varchar", length=255) <br/> */ public $topic ; /** <br/> * @DoctrineColumn(type="varchar") <br/> */ public $text ; /** <br/> * @DoctrineManyToOne(targetEntity="Doctrine\Tests\Models\CMS\CmsUser", <br/> joinColumns={"user_id" = "id"}) <br/> */ public $user ; /** <br/> * @DoctrineOneToMany(targetEntity="Doctrine\Tests\Models\CMS\CmsComment", mappedBy="article") <br/> */ public $comments ; }
<?php namespace Doctrine\Tests\Models\CMS; /** <br/> * @DoctrineEntity(tableName="cms_articles") <br/> */ class CmsArticle { /** <br/> * @DoctrineId <br/> * @DoctrineColumn(type="integer") <br/> * @DoctrineIdGenerator("auto") <br/> */ public $id ; /** <br/> * @DoctrineColumn(type="varchar", length=255) <br/> */ public $topic ; /** <br/> * @DoctrineColumn(type="varchar") <br/> */ public $text ; /** <br/> * @DoctrineManyToOne(targetEntity="Doctrine\Tests\Models\CMS\CmsUser", <br/> joinColumns={"user_id" = "id"}) <br/> */ public $user ; /** <br/> * @DoctrineOneToMany(targetEntity="Doctrine\Tests\Models\CMS\CmsComment", mappedBy="article") <br/> */ public $comments ; }
<?php namespace Doctrine\Tests\Models\CMS; /** <br/> * @DoctrineEntity(tableName="cms_articles") <br/> */ class CmsArticle { /** <br/> * @DoctrineId <br/> * @DoctrineColumn(type="integer") <br/> * @DoctrineIdGenerator("auto") <br/> */ public $id ; /** <br/> * @DoctrineColumn(type="varchar", length=255) <br/> */ public $topic ; /** <br/> * @DoctrineColumn(type="varchar") <br/> */ public $text ; /** <br/> * @DoctrineManyToOne(targetEntity="Doctrine\Tests\Models\CMS\CmsUser", <br/> joinColumns={"user_id" = "id"}) <br/> */ public $user ; /** <br/> * @DoctrineOneToMany(targetEntity="Doctrine\Tests\Models\CMS\CmsComment", mappedBy="article") <br/> */ public $comments ; }
<?php namespace Doctrine\Tests\Models\CMS; /** <br/> * @DoctrineEntity(tableName="cms_articles") <br/> */ class CmsArticle { /** <br/> * @DoctrineId <br/> * @DoctrineColumn(type="integer") <br/> * @DoctrineIdGenerator("auto") <br/> */ public $id ; /** <br/> * @DoctrineColumn(type="varchar", length=255) <br/> */ public $topic ; /** <br/> * @DoctrineColumn(type="varchar") <br/> */ public $text ; /** <br/> * @DoctrineManyToOne(targetEntity="Doctrine\Tests\Models\CMS\CmsUser", <br/> joinColumns={"user_id" = "id"}) <br/> */ public $user ; /** <br/> * @DoctrineOneToMany(targetEntity="Doctrine\Tests\Models\CMS\CmsComment", mappedBy="article") <br/> */ public $comments ; }
<?php namespace Doctrine\Tests\Models\CMS; /** <br/> * @DoctrineEntity(tableName="cms_articles") <br/> */ class CmsArticle { /** <br/> * @DoctrineId <br/> * @DoctrineColumn(type="integer") <br/> * @DoctrineIdGenerator("auto") <br/> */ public $id ; /** <br/> * @DoctrineColumn(type="varchar", length=255) <br/> */ public $topic ; /** <br/> * @DoctrineColumn(type="varchar") <br/> */ public $text ; /** <br/> * @DoctrineManyToOne(targetEntity="Doctrine\Tests\Models\CMS\CmsUser", <br/> joinColumns={"user_id" = "id"}) <br/> */ public $user ; /** <br/> * @DoctrineOneToMany(targetEntity="Doctrine\Tests\Models\CMS\CmsComment", mappedBy="article") <br/> */ public $comments ; }
<?php namespace Doctrine\Tests\Models\CMS; /** <br/> * @DoctrineEntity(tableName="cms_articles") <br/> */ class CmsArticle { /** <br/> * @DoctrineId <br/> * @DoctrineColumn(type="integer") <br/> * @DoctrineIdGenerator("auto") <br/> */ public $id ; /** <br/> * @DoctrineColumn(type="varchar", length=255) <br/> */ public $topic ; /** <br/> * @DoctrineColumn(type="varchar") <br/> */ public $text ; /** <br/> * @DoctrineManyToOne(targetEntity="Doctrine\Tests\Models\CMS\CmsUser", <br/> joinColumns={"user_id" = "id"}) <br/> */ public $user ; /** <br/> * @DoctrineOneToMany(targetEntity="Doctrine\Tests\Models\CMS\CmsComment", mappedBy="article") <br/> */ public $comments ; }
<?php namespace Doctrine\Tests\Models\CMS; /** <br/> * @DoctrineEntity(tableName="cms_articles") <br/> */ class CmsArticle { /** <br/> * @DoctrineId <br/> * @DoctrineColumn(type="integer") <br/> * @DoctrineIdGenerator("auto") <br/> */ public $id ; /** <br/> * @DoctrineColumn(type="varchar", length=255) <br/> */ public $topic ; /** <br/> * @DoctrineColumn(type="varchar") <br/> */ public $text ; /** <br/> * @DoctrineManyToOne(targetEntity="Doctrine\Tests\Models\CMS\CmsUser", <br/> joinColumns={"user_id" = "id"}) <br/> */ public $user ; /** <br/> * @DoctrineOneToMany(targetEntity="Doctrine\Tests\Models\CMS\CmsComment", mappedBy="article") <br/> */ public $comments ; }
<?php namespace Doctrine\Tests\Models\CMS; /** <br/> * @DoctrineEntity(tableName="cms_articles") <br/> */ class CmsArticle { /** <br/> * @DoctrineId <br/> * @DoctrineColumn(type="integer") <br/> * @DoctrineIdGenerator("auto") <br/> */ public $id ; /** <br/> * @DoctrineColumn(type="varchar", length=255) <br/> */ public $topic ; /** <br/> * @DoctrineColumn(type="varchar") <br/> */ public $text ; /** <br/> * @DoctrineManyToOne(targetEntity="Doctrine\Tests\Models\CMS\CmsUser", <br/> joinColumns={"user_id" = "id"}) <br/> */ public $user ; /** <br/> * @DoctrineOneToMany(targetEntity="Doctrine\Tests\Models\CMS\CmsComment", mappedBy="article") <br/> */ public $comments ; }
<?php namespace Doctrine\Tests\Models\CMS; /** <br/> * @DoctrineEntity(tableName="cms_articles") <br/> */ class CmsArticle { /** <br/> * @DoctrineId <br/> * @DoctrineColumn(type="integer") <br/> * @DoctrineIdGenerator("auto") <br/> */ public $id ; /** <br/> * @DoctrineColumn(type="varchar", length=255) <br/> */ public $topic ; /** <br/> * @DoctrineColumn(type="varchar") <br/> */ public $text ; /** <br/> * @DoctrineManyToOne(targetEntity="Doctrine\Tests\Models\CMS\CmsUser", <br/> joinColumns={"user_id" = "id"}) <br/> */ public $user ; /** <br/> * @DoctrineOneToMany(targetEntity="Doctrine\Tests\Models\CMS\CmsComment", mappedBy="article") <br/> */ public $comments ; }
<?php namespace Doctrine\Tests\Models\CMS; /** <br/> * @DoctrineEntity(tableName="cms_articles") <br/> */ class CmsArticle { /** <br/> * @DoctrineId <br/> * @DoctrineColumn(type="integer") <br/> * @DoctrineIdGenerator("auto") <br/> */ public $id ; /** <br/> * @DoctrineColumn(type="varchar", length=255) <br/> */ public $topic ; /** <br/> * @DoctrineColumn(type="varchar") <br/> */ public $text ; /** <br/> * @DoctrineManyToOne(targetEntity="Doctrine\Tests\Models\CMS\CmsUser", <br/> joinColumns={"user_id" = "id"}) <br/> */ public $user ; /** <br/> * @DoctrineOneToMany(targetEntity="Doctrine\Tests\Models\CMS\CmsComment", mappedBy="article") <br/> */ public $comments ; }
<?php namespace Doctrine\Tests\Models\CMS; /** <br/> * @DoctrineEntity(tableName="cms_articles") <br/> */ class CmsArticle { /** <br/> * @DoctrineId <br/> * @DoctrineColumn(type="integer") <br/> * @DoctrineIdGenerator("auto") <br/> */ public $id ; /** <br/> * @DoctrineColumn(type="varchar", length=255) <br/> */ public $topic ; /** <br/> * @DoctrineColumn(type="varchar") <br/> */ public $text ; /** <br/> * @DoctrineManyToOne(targetEntity="Doctrine\Tests\Models\CMS\CmsUser", <br/> joinColumns={"user_id" = "id"}) <br/> */ public $user ; /** <br/> * @DoctrineOneToMany(targetEntity="Doctrine\Tests\Models\CMS\CmsComment", mappedBy="article") <br/> */ public $comments ; }
<?php namespace Doctrine\Tests\Models\CMS; /** <br/> * @DoctrineEntity(tableName="cms_articles") <br/> */ class CmsArticle { /** <br/> * @DoctrineId <br/> * @DoctrineColumn(type="integer") <br/> * @DoctrineIdGenerator("auto") <br/> */ public $id ; /** <br/> * @DoctrineColumn(type="varchar", length=255) <br/> */ public $topic ; /** <br/> * @DoctrineColumn(type="varchar") <br/> */ public $text ; /** <br/> * @DoctrineManyToOne(targetEntity="Doctrine\Tests\Models\CMS\CmsUser", <br/> joinColumns={"user_id" = "id"}) <br/> */ public $user ; /** <br/> * @DoctrineOneToMany(targetEntity="Doctrine\Tests\Models\CMS\CmsComment", mappedBy="article") <br/> */ public $comments ; }
<?php namespace Doctrine\Tests\Models\CMS; /** <br/> * @DoctrineEntity(tableName="cms_articles") <br/> */ class CmsArticle { /** <br/> * @DoctrineId <br/> * @DoctrineColumn(type="integer") <br/> * @DoctrineIdGenerator("auto") <br/> */ public $id ; /** <br/> * @DoctrineColumn(type="varchar", length=255) <br/> */ public $topic ; /** <br/> * @DoctrineColumn(type="varchar") <br/> */ public $text ; /** <br/> * @DoctrineManyToOne(targetEntity="Doctrine\Tests\Models\CMS\CmsUser", <br/> joinColumns={"user_id" = "id"}) <br/> */ public $user ; /** <br/> * @DoctrineOneToMany(targetEntity="Doctrine\Tests\Models\CMS\CmsComment", mappedBy="article") <br/> */ public $comments ; }
<?php namespace Doctrine\Tests\Models\CMS; /** <br/> * @DoctrineEntity(tableName="cms_articles") <br/> */ class CmsArticle { /** <br/> * @DoctrineId <br/> * @DoctrineColumn(type="integer") <br/> * @DoctrineIdGenerator("auto") <br/> */ public $id ; /** <br/> * @DoctrineColumn(type="varchar", length=255) <br/> */ public $topic ; /** <br/> * @DoctrineColumn(type="varchar") <br/> */ public $text ; /** <br/> * @DoctrineManyToOne(targetEntity="Doctrine\Tests\Models\CMS\CmsUser", <br/> joinColumns={"user_id" = "id"}) <br/> */ public $user ; /** <br/> * @DoctrineOneToMany(targetEntity="Doctrine\Tests\Models\CMS\CmsComment", mappedBy="article") <br/> */ public $comments ; }
それで、ここで何に注意を払うべきですか:
1)DocBlockコメントを使用してクラスマッピングのメタデータを設定します(XMLマッピングとYAMLマッピングはまだここにあります)
2)Doctrineの組み込みクラスからCmsArticleクラスを継承しません。
3.)クラスプロパティはパブリックとして宣言する必要はなく、プライベートまたは保護できます。 Doctrineは各プロパティのゲッターとセッターを持つ必要はありません。 クラスを自由に設計できます。
友人、私はそれが素晴らしいと思います!
DocBlockコメントの読み取りはReflectionを使用して実装されていると思います(getDocCommentメソッドがあります)。
Reflectionのかなり興味深いアプリケーション。
ちなみに、より積極的かつエレガントに(IMHO)これはRecess phpフレームワークで使用されます。 彼につまずいてびっくりしました。私は自分の自転車でやりたいことをまさに見ました。 間違いなく注目に値する。
性能:
php5.3のDoctrine 2.0は、PHP 5.2.8のDoctrine 1.0よりも31%少ないメモリを消費し、17%高速に実行します
(開発者ブログの予備テストからの情報)
Doctrine 2.0 Alpha 3の新機能:
私の観点から最も重要なことは、スキームをDoctrine 1.0から2.0に変換する機能です。
また、開発者が言うように、コードが安定し始めているように、60を超える修正、コードのリファクタリング、マッピングとエクスポート用のドライバーでの作業。
何を期待すべきか:
2009年12月11日にはアルファ版がリリースされ、最初のベータ版は1月8日にリリースされます。
参照:
Doctrine PHP ORMはここにあります
バージョン2.0のドキュメントは次のとおりです。
開発者ブログ投稿タグ2.0
友人、私はあなたが興味を持っていて、あなた自身のために何か新しいことを学んだことを願っています! (個人的にはDocBlockコメントの使用が本当に好きでした) 活発な議論を楽しみにしています!