Вот он какой, Doctrine 2 (Приурочено к релизу Doctrine 2.0 alpha 3)
Автор: Nayjest Категория: php
Поздравляю, коллеги! 3 дня назад увидела свет треться альфа-версия самого мощного на сегодняшний день ORM-фреймворка для PHP: Doctrine.
И эта новость по большему счету заслуживает внимания потому что в Doctrine 2.0 произошли очень существенные изменения в сравнении с предыдущими версиями. Сразу замечу, что вкусности эти потребуют от нас ни много ни мало — поддержку php 5.3.
Официальный тизер Doctrine 2.0 выглядит так:
- <?php
- namespace Doctrine\Tests\Models\CMS;
- /**
* @DoctrineEntity(tableName=»cms_articles»)
*/- class CmsArticle
- {
- /**
* @DoctrineId
* @DoctrineColumn(type=»integer»)
* @DoctrineIdGenerator(«auto»)
*/- public $id;
- /**
* @DoctrineColumn(type=»varchar», length=255)
*/- public $topic;
- /**
* @DoctrineColumn(type=»varchar»)
*/- public $text;
- /**
* @DoctrineManyToOne(targetEntity=»Doctrine\Tests\Models\CMS\CmsUser»,
joinColumns={«user_id» = »id»})
*/- public $user;
- /**
* @DoctrineOneToMany(targetEntity=»Doctrine\Tests\Models\CMS\CmsComment», mappedBy=»article»)
*/- 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


Ноябрь 15th, 2009 - 13:44
getDocComment в Reflection это зачетная штука. Я вот раньше долго думал, нафига же нужен этот Reflection :)
Ноябрь 15th, 2009 - 13:56
Привет с Хабра! :)
Весьма интересный подход они использовали в Doctrine 2.0, надо будет покопаться
Ноябрь 15th, 2009 - 13:58
Ну, в смысле, я юзал когда-то Doctrine, как-то оно слишком громоздко показалось, а сейчас возможно второй шанс взяться за эту библиотеку.
Ноябрь 15th, 2009 - 14:02
Ыыы, ну почему ж php 5.3, мой хостер даже не планирует пока обновляться :(
Ноябрь 15th, 2009 - 18:48
О да, Recess php framework доставляет
Ноябрь 17th, 2009 - 01:13
Вот он какой, Doctrine 2 (Приурочено к релизу Doctrine 2.0 alpha 3)…
Thank you for submitting this cool story – Trackback from progg.ru…
Ноябрь 19th, 2009 - 04:35
Синтаксис мета-описания классов модели (меппинга) в DocBlock они могли бы сделать более простым, читаемым и лаконичным.
Слишком много синтаксического мусора, как по мне, в формате, предлагаемом Doctrine 2.0.
Кроме того, можно было бы разработать какие-то правила для автоматического осуществления объектно-реляционного меппинга, например если есть public поле у класса, которое именуется примерно так: public $author_id, то можно было бы подтягивать автоматически модеть Author.
Может посоветуете какую-то хорошую ORM-библиотеку для PHP, где такое есть?
Ноябрь 20th, 2009 - 10:10
Ухх, если бы вы знали, какая тормозная штука этот Reflection…
Ноябрь 25th, 2009 - 16:45
Mr X, ну в том же Recess framework посмотрите, там все полаконичней как-то, но я особо их ORM не копал, не знаю, какая там производительность, не знаю даже есть ли кеширование, да и возможно — просто сыровато на данный момент. Но поизучать однозначно стоит, если вы ищете какой-то новый framework.
Январь 9th, 2010 - 19:05
@Satta
Я проверял – установка значения объекта через ReflectionProperty где-то в три раза медленнее обычного способа ($a->b = «value»). И в полтора-два раза медленнее сеттеров (в PHP 5.3).
На 100 000 вызовов установки значения свойства класса, получились такие значения:
0.05102300643920 ($a->b = mt_rand(0,100000))
0.09682297706604 ($a->setB(mt_rand(0,100000)))
0.16601204872131 (ReflectionProperty::setValue($a, mt_rand(0,1000000)))
Пробовал устанавливать и private – те же результаты. Так что в целом вполне приемлемо, учитывая, что это спички по сравнению с другими вызовами в коде.
Март 8th, 2010 - 12:16
что то не очень внятно
Март 28th, 2010 - 20:38
Полезная статейка, спасибо!!
Апрель 1st, 2010 - 19:54
Спасибо за обзор и ссылки! Изучаю с удовольствием!
Апрель 12th, 2010 - 16:44
Какойто уж сильно громоздкий Doctrine 2, не все понятно что к чему…
Апрель 25th, 2010 - 18:40
Да ладно, простой код..что тут громоздкого Вы увидели? О_о .. я проверил, нормально вполне..
Июнь 3rd, 2010 - 18:18
Давно мой суженый с этой системой работает, все расхваливает мне, расхваливает, а я никак не могла понять, о чем он :) Теперь с вашей помощью разобралась. Спасибо! :)
Июнь 5th, 2010 - 02:57
Спасибо! пост понравился, приступаю к изучению
Июнь 6th, 2010 - 02:21
Прикольная статья получилась, а главное просто и понятно написана :)
Большое спасибо, побольше бы таких статей.
Июнь 13th, 2010 - 15:37
Как же все это сложно. Слава богу у меня есть знакомый программист.
Июнь 17th, 2010 - 14:29
Леди, поддерживаю полностью))
Июнь 25th, 2010 - 15:36
Мне тоже показалась тормозной, может ест какие секреты как настроить еще?
Июль 7th, 2010 - 13:37
Понятно и доходчиво, спасибо!
Июль 15th, 2010 - 11:07
фантастика!…
Июль 31st, 2010 - 19:50
Нормальный же…
Август 2nd, 2010 - 20:35
до пхп 5.3 далеко
Август 7th, 2010 - 12:42
Пора МОзг архивировать
Август 12th, 2010 - 21:51
Спасибо было очень полезно почитать, и браться за работу
Август 17th, 2010 - 22:41
Наконец то что искал! Буду разбираться! Спасибо автор!
Сентябрь 6th, 2010 - 12:07
Полезная статья, спасибо за обзор и ссылки!
Сентябрь 6th, 2010 - 21:50
Отличная статься!
п.с. как же много спамных комментов)) я больше еще нигде не видел))
Сентябрь 7th, 2010 - 17:24
Это вообще отличная штука! Сам ей уже давно пользуюсь, чуть ли не с самого её релиза.
Сентябрь 9th, 2010 - 10:02
Так, как всегда мнения разделились. Пока, как говорится, сам не попробуешь.. :)
Автору респект за обзор. Затестим сейчас бета версию
Октябрь 29th, 2010 - 15:27
Лично я остался даволен. С Doctrine приятно работать :)
Ноябрь 11th, 2010 - 19:36
Это очень хорошая новость для тех, кто в этом разбирается, всем остальным же остаётся только писать такие вот комменты) Вроде и мимо проходить как-то неудобно, а по теме и сказать нечего.
Март 5th, 2011 - 01:53
Мне тоже показалась тормозной, может ест какие секреты как настроить еще?
Март 5th, 2011 - 21:16
Аа – класс!) Буду изучать, мне не помешает!) Спасибо!
Март 29th, 2011 - 16:58
тёмный лес)
Март 30th, 2011 - 11:51
Book
да всё же просто)
Апрель 1st, 2011 - 11:56
всё же тёмный лес)
Май 4th, 2011 - 23:45
Уже использую релиз доктрины 2.0
Понравилась работа с массовыми выборками createQuery()->iterate, когда открывается отдельный коннект к базе и постепенно отдается информация.
Не понравилась работа из связями таблиц. Особенно когда нужно внести изменения в структуру таблиц.
Май 11th, 2011 - 11:00
Ironadmin
согласен, очень удобно.
Май 30th, 2011 - 15:48
старая новость)
Июнь 27th, 2011 - 19:17
Хороший обзор, спасибо!
Август 19th, 2011 - 15:38
Спасибо за инфу, полезно!
Октябрь 28th, 2011 - 19:37
Блин, надо хостера пинать!
Декабрь 16th, 2011 - 17:31
Привет. нашел http://www.nayjest.ru в топе Google. Классно это у вас получается.
Декабрь 29th, 2011 - 05:25
если я начну с вами спорить на эту тему вы меня наверное забаните на http://www.nayjest.ru ?
Январь 14th, 2012 - 05:21
Я должен сказать, это действительно очень хороший роман, хотя, я только что достигла примерно на полпути вниз по дороге читая роман, но был один, который всегда держал меня интересует. Я просто не могу удержаться, чтобы получить сделано с книгой.
Январь 14th, 2012 - 05:22
Мне нравится ваша точка view.Could вы объяснить подробнее об этом предмете? Я взволнован, чтобы найти ваш сайт, и ждет более обновлений с you.By способ сохранить хорошую работу
Январь 19th, 2012 - 22:44
Как-то давно разбирался в этом фреймворке. Функционал конечно хороший, но на ту пору сырой был проект – достаточно много багов и недоработок было.