https://github.com/uuf6429/expression-language-arrowfunc
➡️ Arrow function support in Symfony Expression Language
https://github.com/uuf6429/expression-language-arrowfunc
arrow-functions expression-language php symfony syntax uuf6429
Last synced: 4 months ago
JSON representation
➡️ Arrow function support in Symfony Expression Language
- Host: GitHub
- URL: https://github.com/uuf6429/expression-language-arrowfunc
- Owner: uuf6429
- License: mit
- Created: 2016-10-30T02:43:24.000Z (over 8 years ago)
- Default Branch: master
- Last Pushed: 2022-07-20T21:40:04.000Z (almost 3 years ago)
- Last Synced: 2025-03-16T16:09:07.023Z (4 months ago)
- Topics: arrow-functions, expression-language, php, symfony, syntax, uuf6429
- Language: PHP
- Homepage:
- Size: 47.9 KB
- Stars: 3
- Watchers: 1
- Forks: 3
- Open Issues: 3
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
# Symfony Expression Language Arrow Function
[](https://travis-ci.org/uuf6429/expression-language-arrowfunc)
[](https://php.net/)
[](https://raw.githubusercontent.com/uuf6429/expression-language-arrowfunc/master/LICENSE)
[](https://codecov.io/github/uuf6429/expression-language-arrowfunc?branch=master)
[](https://scrutinizer-ci.com/g/uuf6429/expression-language-arrowfunc/?branch=master)
[](https://packagist.org/packages/uuf6429/expression-language-arrowfunc)Arrow function (aka "Lambda Expression" or "Anonymous Function") support in Symfony [Expression Language component](https://symfony.com/doc/current/components/expression_language.html).
## Syntax
```
(a) -> { a * 2 }
^ ^ ^
| | '----- Function body is a single expression that can make use of passed parameters or global variables.
| '------------ The lambda operator - input parameters are to the left and the output expression to the right.
'--------------- Comma-separated list of parameters passed to arrow function.
```## Safety
Returning callbacks can be dangerous in PHP. If the returned value is not checked, PHP may end up executing arbitrary global functions, static class methods or object methods.
### Problem Example
```php
$language = new ExpressionLanguage();
$expression = '(value) -> { value > 20 }';
$filter = $language->evaluate($expression);
$values = array_filter([18, 23, 40], $filter);
```If `$expression` returns a string or array, `array_filter()` will arbitrarily call whatever was returned.
### Solution
There are two solutions:
- Set the type declaration of methods using the callback to `Closure` (*not `Callable`!*) - prone to mistakes and quite risky.
- The engine returns the callback wrapped in an object that cannot be invoked by default - this is the safest option (and default one).