Предлагаем вашему вниманию очередную подборку с ссылками на новости и материалы.
Приятного чтения!
Читать дальше →
Предлагаем вашему вниманию очередную подборку с ссылками на новости и материалы.
Приятного чтения!
Читать дальше →
Не так давно взялся за Symfony2. Не смотря на то, что до этого имел достаточно богатый опыт общения ...
Доброго времени суток хабровчане. Во время работы над админ частью одного русскоязычного ресурса, ...
... class="php">use
\Component\ExpressionLanguage\ ... , используемых в
.
Примеры ...
В 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.
Примеры под катом