Для чего нужен БНФ доктрины? - PullRequest
0 голосов
/ 25 февраля 2010

Это похоже на большой беспорядок, как это работает как ссылка?

http://www.doctrine -project.org / документация / ручной / 1_1 / а / DQL-доктрина-запросы язык% 3Abnf

Ответы [ 2 ]

3 голосов
/ 25 февраля 2010

Я не думаю, что оно используется в качестве эталона любым человеком, на самом деле;но это может быть полезно, если кто-то хочет использовать какой-то автоматический инструмент, который понимает BNF;например, какой-то генератор кода.

Преимущество BNF заключается в том, что он является формальным способом описания языка - гораздо проще для понимания, чем английский, когда вы являетесь программой.


Для справки:



Редактировать после комментариев: Вот краткий пример о DQL / Object:

Давайте рассмотрим эту часть кода, котораяиспользует объектно-ориентированный API для написания запроса, его выполнения и получения результатов (гидратируется как массивы - печатает только данные, таким образом, при отладке) :

$result = Doctrine_Query::create()
    ->select('p.id, p.title, u.login')
            ->from('Ab_Model_Post p')
            ->innerJoin('p.User u')
            ->where('p.codeStatus = ?')
            ->orderBy('p.date desc')
            ->limit(2)
            ->execute(array('OK'), Doctrine::HYDRATE_ARRAY);
var_dump($result);

И вот такой вывод вы получите:

array
  0 => 
    array
      'id' => string '7' (length=1)
      'title' => string 'Septième post' (length=14)
      'User' => 
        array
          'id' => string '1' (length=1)
          'login' => string 'user1' (length=5)
  1 => 
    array
      'id' => string '6' (length=1)
      'title' => string 'Sixième post (draft=7)' (length=23)
      'User' => 
        array
          'id' => string '1' (length=1)
          'login' => string 'user1' (length=5)

Конечно, это с учетом того, что классы схемы и моделей в порядке - и извините за пример на французском, яиспользовал схему / модель / базу данных, которую я создал некоторое время назад для демонстрации Doctrine, которая была вch.

По сути, БД предназначена для приложения для ведения блогов, и здесь мы:

  • получаем некоторые данные из сообщений и пользователя, который их разместил
  • для действительных сообщений
  • наибольшее количество сообщений
  • только два сообщения


Теперь вот эквивалент, используя то, что я имел в виду под "DQL"«как в« псевдо-SQL-языке »:

$result = Doctrine_Query::create()
    ->query(<<<DQL
select p.id, p.title, u.login
from Ab_Model_Post as p, 
    p.User u
where p.codeStatus = ?
order by p.date desc
limit 2
DQL
    , array('OK'), Doctrine::HYDRATE_ARRAY);
var_dump($result);

Здесь нет объектно-ориентированного API (ну, я имею в виду, чтобы написать запрос) : я написал только этот псевдо-SQLНасколько я могу судить, я думал о том, что описывает BNF.

И, конечно же, вывод var_dump точно такой же, как тот, который я получил раньше.


Надеюсь, это немного прояснит ситуацию: -)

0 голосов
/ 25 февраля 2010

Это форма Бэкуса-Наура, метод описания контекстно-свободных грамматик. См. эту статью в Википедии .

...