Блог

Phalcon. Впечатления

Наверно ты уже сталкивался с phalcon, и ты возможно в курсе, что это самый быстрый PHP framewok. Но если тебе так и не довелось побывать на море повстречать этот framewok, то знай же, что он написан на C и ставится как extension для PHP, следовательно уже загружен в оперативную память и повышает производительность, но кстати phalcon 2 - написана на Zephir. Лично знаком с framework без года неделю, другими словами в production полноценно еще не использовал, но уже есть некое представление, которым и хочется поделится.

Следуй за синим слоном

Упоминания в сети

Когда на хабре появилась первая статья про Phalcon началось активное обсуждение в комментариях, правда вот в последнее время на хабре про него упоминали наверно разве что в дайжестах и в постах, где выходило описание его новой версия, не считая нескольких статей об его использовании на практике, в том числе для REST. На этом местный поток инфы заканчивается.

Также можно ознакомиться с выступлением на fwdays в 2013 Александра Торош, к видео прилагаются слайды

Кстати упоминание про Phalcon, можно найти и за пределами нашего любимого рунета, например: digitalocean расскажет как установить phalcon на vps; матерый Anthony Ferrara спешит поделиться своими мыслями; а кто-то из Suyati Technologies даже готов умереть за этот фреймворк. Рекомендую ознакомится с инфопотоком на sitepoint.

По сути все эти источники будут тебе говорить, что phalcon быстрый, производительный. Вообщем идем дальше.

Подготовка к использованию

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

Для удобной разработки разверни у себя phalcon devtools, эти инструменты помогут тебе из web или из консоли в создании моделей, контроллеров или скелета приложения, помогут в создании и запуске миграций и тому подобное.

Работа классов в большинстве интуитивно понятна, и если ты все таки поставил devtools, то для удобства можешь подключить описание классов phalcon в IDE PHP Storm или ему подобный для autocomplete и путешествии по абстракциям.

Хочу заметить, что понятие 'из коробки', не совсем подходит для phalcon, многие вещи тебе придется ставить дополнительно например из phalcon github репозитория.

Разработка

Структура самого простого приложения на phalcon выглядит так:

app/
    controllers/
    models/
    views/
  public/
    css/
    img/
    js/
    index.php

Многомодульное приложение выглядит следующим образом:

apps/
    backend/
      controllers/
      models/
      views/
      Module.php
    frontend/
      controllers/
      models/
      views/
      Module.php
  public/
    css/
    img/
    js/
    index.php

Из коробки также можно создавать микроприложения, привет REST:

$app = new Phalcon\Mvc\Micro();
$app->get('/', function () {
    echo 'Welcome!';
});
$app->get('/say/hello/{name}', function ($name) use ($app) {
    echo 'Hello! $name';
    echo 'Your IP Address is ', $app->request->getClientAddress();
});
$app->post('/store/something', function () use ($app) {
    $name = $app->request->getPost('name');
    echo 'Hello! $name';
    
});
$app->notFound(function () use ($app) {
    $app->response->setStatusCode(404, 'Not Found')->sendHeaders();
    echo 'This is crazy, but this page was not found!';
});
$app->handle();

Различного рода вариации структуры MVC приложения ты можешь глянуть на github, разработчики снова позаботились, чтобы у тебя было меньше как можно вопросов.

Из особенностей framework, которые бросились первыми бросятся в глаза: наличие Dependency Injection, что поможет прозрачно разделять функционал модулей, наличие собственного Loader'а - можно даже в какой-то мере отказаться от autoloader'а в composer при построении проекта.

Конечно, если углубиться, то помимо MVC составляющих можешь обнаружить огромное количество фич, вот некоторые интересные из них:

Все ли так идеально?

Видимо в силу того, что разработчики большую часть своих сил кидали возможно на Zephir, или возможно на bugfix, сложно сказать, но очевидно, что на создание всего god like комплекса инструментов 'из коробки' не хватило. Ребята и без того проделали большую работу, спору нет, но опытный пользователь фрейморков требует, как обычно, чуть больше! Лично мне не хватило из коробки классов для работы с Grid, какие есть в Yii2, или вот в devtools отстутствует команда message для поиска и коллекционирования языковых строк для i18n.

Не реализованный функционал - это конечно мелочи по сравнению с тем, если обнаружится баг в самом фреймворке, из-за которого встанет вся твоя разработка. Если ты не сильно разбираешь или не разбираешься вовсе в C++, сделать самостоятельно bugfix не выйдет, придется ждать официального или патча или искать сведущего спеца, а это займет время. Выходит можно попасть в неприятности, но благо в такой ситуации лично еще ни разу не довелось быть.

Если при выборе framework стоит вопрос производительности - выбираем phalcon, сомнений не может быть. Но если в приоритете наличие каких-то конкретных фич, естественно, которых в phalcon нет, то стоит задуматься, быстрее тебе дописать их или все же куда эффективней использовать другой фреймворк.

Но прежде чем задуматься о выборе не в пользу phalcon, я надеюсь ты побывал на форуме, воспользовался поиском на github (как ни как у phalcon 1,3k follower'ов) и тебя не забанили в google.

Что дальше?

Phalcon 2. разработка уже давно ведется, ждем релиза. Исходники написаны на Zephir, это своего рода как coffeescript для javascript, но только в мире PHP. Тем самым ты думаю сможешь без глубоких знаний C читать исходники phalcon, писать к ним bugfix или писать какие-то свои отдельные проекты. Кстати на codefest 2015 совсем недавно о Zephir рассказал @ovr.

Надеюсь, что в будущем для phalcon 2 утилита devtools станет более функциональной и конечно же решений из коробки в самом phlacon 2 станет больше.

Источник - http://ufocoder.com/ru/blog/2015/phalcon-vpechatle...