Описание с примерами можно почитать на гитхабе (лицензия MIT): github.com/xpl/useless
Описание с примерами можно почитать на гитхабе (лицензия MIT): github.com/xpl/useless
Предвижу вопросы «зачем это нужно», и «это уже есть в XXX», заранее отвечаю: эта штука существует и пишется уже не первый год, как pet project используемый в собственных разработках, то есть это некий сублимированный опыт просто. В последний год удалось собрать это все вместе в рамках открытой технологии, и опубликовать.
В данный момент используется во фронт-енде в паре крупных проектов, поэтому усилия сейчас сконцентрированы на том чтобы довести основную часть библиотеки до продакшен качества. В настоящее время находится в активной разработке, поэтому ещё далеко до стабильности — что-то может не работать, или работать неправильно. Если кому понравится — присоединяйтесь, рад буду видеть ваши пулл реквесты.
По поводу названия:
. Компонент является движком для ...
В Symfony 2.4 появится новый компонент —
ExpressionLanguage. Компонент является движком для компиляции и исполнения «выражений».
Этот язык является урезанной версией твига. Выражения укладываются в одну строку и обычно возвращают булево значения, но не ограничиваются этим.
В отличии от твига, ExpressionLanguage работает в двух режимах:
- Компиляция: выражение компилируется в PHP код для последующего исполнения (код не зависит от среды выполнения)
- Исполнение: выражение исполняется без предварительной компиляции
Чтобы было возможно компилировать выражения в PHP код, не нуждающийся в модификации во время выполнения, оператор
.
должен быть явным и означать лишь одно возможное поведение:
foo.bar
— для свойств объекта,
foo['bar']
для доступа к массиву,
foo.getBar()
для вызова методов.
Использование компонента просто на сколько это возможно:
use Symfony\Component\ExpressionLanguage\ExpressionLanguage;
$language = new ExpressionLanguage();
echo $language->evaluate('1 + 1');
// echo 2
echo $language->compile('1 + 2');
// echo "(1 + 2)"
Язык выражений поддерживает все то же что и твиг: математические операторы, строки, числа, массивы, хеши, булевы переменные… Выражения могут рассматриваться как очень ограниченная PHP-песочница, в которой невозможны внешние воздействия, все переменные должны быть объявлены заранее до компиляции или исполнения выражения.
$language->evaluate('a.b', array('a' => new stdClass()));
$language->compile('a.b', array('a'));
Последнее, но не по значению — вы можете легко расширить язык с помощью функций. Они работают точно также как их аналоги в твиге (для подробного ознакомления посмотрите метод
register()
)
Как на счет примеров использования? Мы встроили компонент во множество других компонентов, используемых в Symfony.
Примеры под катом
В этой статье я расскажу как можно организовать процесс сборки фронтэнда «от и до».
...