Поздравляю, коллеги! 3 дня назад увидела свет треться альфа-версия самого мощного на сегодняшний день ORM-фреймворка для PHP: 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;
- }
Итак, на что нам здесь следовало бы обратить здесь внимание:
1) Мы задаем мета-данные для меппинга класса с помощью комментариев DocBlock (XML-меппиг и YAML-меппинг никуда не делся)
2) Мы не наследуем наш класс CmsArticle от встроенных класов Doctrine.
3.) Свойства класса не обязаны быть объявлены как public, они могут быть приватными или защищенными. Doctrine не требует от вас наличия getter'od и setter'ов для каждого свойства. Вы полностью свободны в том, как вы будете проектировать ваши классы.
Друзья, по-моему это великолепно!
Смею предположить, что чтение комментариев DocBlock реализовано с помощью Reflection (там есть метод getDocComment).
Довольно интересное применение Reflection.
Кстати, еще более активно и более элегантно(имхо) это используется в Recess php framework. Случайно наткнулся на него и был поражен, увидел там именно то, что хотел делать в собственном велосипеде. Вещь однозначно заслуживает внимания.
Производительность:
Doctrine 2.0 на php5.3 кушает на 31% меньше памяти и выполняется на 17% быстрее, чем Doctrine 1.0 на PHP 5.2.8
(информация из предварительных тестов в блоге разработчиков)
Что нового в Doctrine 2.0 Alpha 3:
Самое существенное с моей точки зрения это функционал для конвертирования схем из Doctrine 1.0 в 2.0.
А также более 60 фиксов, рефакторинг кода, работа над драйверами для меппинга и экспорта, как говорят разработчики, код начинает становиться стабильным.
Чего нам ждать:
11 декабря 2009 будет еще один альфа-релиз, а 8-го января выйдет уже первая бета.
Ссылки:
Здесь живет Doctrine PHP ORM
Вот документация по версии 2.0:
Посты из блога разработчиков с тегом 2.0
Друзья, надеюсь вам было интересно и вы почерпнули что-то новое для себя! (лично мне очень понравилось использование комментариев DocBlock) Жду активного обсуждения!