ここにあります、Doctrine 2.0(Doctrine 2.0 Alpha 3のリリース専用)

画像

おめでとう、同僚! 3日前、PHP用の最も強力なORMフレームワークの3番目のアルファバージョン:Doctrineが本日リリースされました。



Doctrine 2.0では以前のバージョンと比較して非常に大きな変更があったため、このニュースは概して注目に値します。 すぐにこれらのグッズが必要になることに気付くでしょう-PHP 5.3のサポート。



Doctrine 2.0の公式ティーザーは次のようになります。

  1. <?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 ; }







  2. <?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 ; }







  3. <?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 ; }







  4. <?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 ; }







  5. <?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 ; }







  6. <?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 ; }







  7. <?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 ; }







  8. <?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 ; }







  9. <?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 ; }







  10. <?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 ; }







  11. <?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 ; }







  12. <?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 ; }







  13. <?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 ; }







  14. <?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 ; }







  15. <?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 ; }







  16. <?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コメントの使用が本当に好きでした) 活発な議論を楽しみにしています!



All Articles