2015-02-16 15:31 GMT+03:00 Benjamin Eberlei <kont...@beberlei.de>:

>
> My question is how do i evaluate this at runtime? I suppose a function is
> necessary like evaluate_ast(...), but  that requires passing the context.
> many many open questions and as nikic points out this should probably be
> delayed to 7.1 because it all should be discussed and specified.
>

This will be like pretty simple to parse:
// For scalars:
$attributes = (new ReflectionMethod(some::class, 'method))->getAttributes();
$cacheableNode = $attributes[Cacheable::class] ?? new
Php\Parser\Node(AST_TYPE_VALUE, 50);
$cacheTime = $cacheableNode->value;

// For more complex things, like expressions or constant, runtime
evaluation can be performed.
$codeNode = $attributes[Php\Contract\Requires::class] ?? new
Php\Parser\Node(AST_TYPE_STATEMENT, '$this->value >=0');
$code = (string) $codeNode;
$result = eval($code);

Reply via email to