Use the Yay preprocessor library to add syntax sugar to PHP to easily implement more elegant code! This article will demonstrate how to use the Yay library to add Ruby-like array slice syntax sugar for PHP. $many[4..8]
Core points:
to get the second, third, and fourth elements of an array few = many[1..3]
. And in PHP, we need to use many
to achieve the same function. Obviously, Ruby's syntax is more concise and elegant. $few = array_slice($many, 1, 3);
Get to use macros:
First of all, we need to install the Yay library:
$ composer require yay/yay:dev-master
with the following code: array_slice.yphp
macro { T_VARIABLE·A[ ···range ] } >> { eval( '$list = ' . →(T_VARIABLE·A) . ';' . '$lower = ' . explode('..', →(···range))[0] . ';' . '$upper = ' . explode('..', →(···range))[1] . ';' . 'return array_slice($list, $lower, $upper - $lower);' ) } macro { →(···expression) } >> { ··stringify(···expression) } $many = [ "She walks in beauty", "like the night", "of cloudless climes", "and starry skies", "And all that's best", "of dark and bright", "meet in her aspect", "and her eyes", "...", ]; $lower = 4; $upper = 8; $few = $many[$lower..$upper];
file to standard PHP code: .yphp
$ vendor/bin/yay array_slice.yphp >> array_slice.php
file will contain the following (may differ slightly, depending on the Yay version): array_slice.php
$many = [ "She walks in beauty", "like the night", "of cloudless climes", "and starry skies", "And all that's best", "of dark and bright", "meet in her aspect", "and her eyes", "...", ]; $lower = 4; $upper = 8; $few = eval( '$list = ' . '$many' . ';'. '$lower = ' . explode('..', '$lower..$upper')[0] . ';' . '$upper = ' . explode('..', '$lower..$upper')[1] . ';' . 'return array_slice($list, $lower, $upper - $lower);' );
Working principle:
Yay breaks the code string into tags through a parser, builds an abstract syntax tree (AST), and replaces the macro with real PHP code, and eventually generates executable PHP code. Due to the limitations of the scope of PHP variables, the macro uses the function, which is slightly inelegant, but effectively implements the expected functions. eval()
The above is the detailed content of PHP Macros for Fun and Profit!. For more information, please follow other related articles on the PHP Chinese website!