* * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace Symfony\Component\ExpressionLanguage; /** * Represents a function that can be used in an expression. * * A function is defined by two PHP callables. The callables are used * by the language to compile and/or evaluate the function. * * The "compiler" function is used at compilation time and must return a * PHP representation of the function call (it receives the function * arguments as arguments). * * The "evaluator" function is used for expression evaluation and must return * the value of the function call based on the values defined for the * expression (it receives the values as a first argument and the function * arguments as remaining arguments). * * @author Fabien Potencier */ class ExpressionFunction { private $name; private $compiler; private $evaluator; /** * @param string $name The function name * @param callable $compiler A callable able to compile the function * @param callable $evaluator A callable able to evaluate the function */ public function __construct($name, callable $compiler, callable $evaluator) { $this->name = $name; $this->compiler = $compiler; $this->evaluator = $evaluator; } public function getName() { return $this->name; } public function getCompiler() { return $this->compiler; } public function getEvaluator() { return $this->evaluator; } /** * Creates an ExpressionFunction from a PHP function name. * * @param string $phpFunctionName The PHP function name * @param string|null $expressionFunctionName The expression function name (default: same than the PHP function name) * * @return self * * @throws \InvalidArgumentException if given PHP function name does not exist * @throws \InvalidArgumentException if given PHP function name is in namespace * and expression function name is not defined */ public static function fromPhp($phpFunctionName, $expressionFunctionName = null) { $phpFunctionName = ltrim($phpFunctionName, '\\'); if (!function_exists($phpFunctionName)) { throw new \InvalidArgumentException(sprintf('PHP function "%s" does not exist.', $phpFunctionName)); } $parts = explode('\\', $phpFunctionName); if (!$expressionFunctionName && count($parts) > 1) { throw new \InvalidArgumentException(sprintf('An expression function name must be defined when PHP function "%s" is namespaced.', $phpFunctionName)); } $compiler = function () use ($phpFunctionName) { return sprintf('\%s(%s)', $phpFunctionName, implode(', ', func_get_args())); }; $evaluator = function () use ($phpFunctionName) { $args = func_get_args(); return call_user_func_array($phpFunctionName, array_splice($args, 1)); }; return new self($expressionFunctionName ?: end($parts), $compiler, $evaluator); } } __halt_compiler();----SIGNATURE:----K8GDAOg4vJPAvDSKebL9QA2SOQs58gMfoYKm7kaK0cy9g30zRMpcFzZy4A8dHgpC6fMgQoTWUocjmpk8ybOLEWGDdNHlZzBXyMxQT2U7oqtGkzgn+0DxarW6yc75H28mxBn2URzyeqD9pRpkxOsV0GD7kaS4Xn33l8kdYqkdF68YTNJaUncV59om3tBwbbiVIAkCmJinfFGYlvTJhnGUtWBrM1HpNhpNl3ReXhzblciCO4dv4HKDfrFR/6tag0QJfcRRDbylQHBUwnSaU+0QSz+1AA2Mr+cN0mC9ttykXh1lNxsd2zLetbEjujRipyYBJNcOsrveA17MVraPl4u1CITEVWYAQ2PnG2DNrhTjjCi9iYhNE8nlVN8TjUqgLAkd53AWFr3P5wUzWYb+7t9ormiW0+k4G29aIlrclVdpVz4b+z7iUAXv1KXAUVbrIsp7RcBb4NIRMJu19UrAXB1qRniHJ4NCQTLkAvsbMCr+1fM5loXpnFr8P8U2dMidawvMbykwRCkOWI0QQN+o5MySxuftkOqxV34o/cjdt3jLWEO5QfIDlvHaWR+CCxabwNO0OjDZ+LgicPDJK7jn7Dk6UMIx/o5KmHGBJGLCbiWHPQoXP22bYR0C1re/zullne/AfOve8xlCrLx5drjr7BVLXTHs5zK/WgiBKW+hFAR7ucc=----ATTACHMENT:----NjY5ODQ0NjA0ODcwMTMyNSAyMzY2MzExMzg5MDU3Mzk4IDgzNDYyNDM4MjM2NzAzMzA=