Both sides previous revisionPrevious revisionNext revision | Previous revision |
rfc:operator_functions [2017/09/09 00:15] – fix error ajf | rfc:operator_functions [2017/09/22 13:28] (current) – external edit 127.0.0.1 |
---|
<code php> | <code php> |
// Select only the positive numbers | // Select only the positive numbers |
$positiveSubset = array_filters($numbers, partialApply('>', 0)); | $positiveSubset = array_filter($numbers, partialApply('<', 0)); |
</code> | </code> |
| |
| An example working partial application implementation would be: |
| |
| <file php partialApply.php> |
| function partialApply(callable $c, ...$args) { |
| return function (...$args2) use ($c, $args) { |
| return $c(...$args, ...$args2); |
| }; |
| } |
| </file> |
| |
==== Detail ==== | ==== Detail ==== |
The table below lists the new functions that would be added to the root namespace (''\''). Each is named the same as its corresponding operator, including any aliases (for the sake of consistency). | The table below lists the new functions that would be added to the root namespace (''\''). Each is named the same as its corresponding operator, including any aliases (for the sake of consistency). |
| |
^ Function signature ^ Corresponding operation ^ Notes ^ | ^ Function signature ^ Corresponding operation ^ Notes ^ |
| <php>'+'($a[, $b])</php> | <php>+$a</php>, <php>$a + $b</php> | | | | <php>'+'($a[, $b])</php> | <php>+$a</php>, <php>$a + $b</php> | | |
| <php>'-'($a[, $b])</php> | <php>-$a</php>, <php>$a - $b</php> | | | | <php>'-'($a[, $b])</php> | <php>-$a</php>, <php>$a - $b</php> | | |
| <php>'*'($a, $b)</php> | <php>$a * $b</php> | | | | <php>'*'($a, $b)</php> | <php>$a * $b</php> | | |
| <php>'/'($a, $b)</php> | <php>$a / $b</php> | | | | <php>'/'($a, $b)</php> | <php>$a / $b</php> | | |
| <php>'%'($a, $b)</php> | <php>$a % $b</php> | | | | <php>'%'($a, $b)</php> | <php>$a % $b</php> | | |
| <php>'**'($a, $b)</php> | <php>$a ** $b</php> | | | | <php>'**'($a, $b)</php> | <php>$a ** $b</php> | | |
| <php>'&'($a, $b)</php> | <php>$a & $b</php> | | | | <php>'&'($a, $b)</php> | <php>$a & $b</php> | | |
| <php>'|'($a, $b)</php> | <php>$a | $b</php> | | | | <php>'|'($a, $b)</php> | <php>$a | $b</php> | | |
| <php>'^'($a, $b)</php> | <php>$a ^ $b</php> | | | | <php>'^'($a, $b)</php> | <php>$a ^ $b</php> | | |
| <php>'~'($a)</php> | <php>~$a</php> | | | | <php>'~'($a)</php> | <php>~$a</php> | | |
| <php>'<<'($a, $b)</php> | <php>$a << $b</php> | | | | <php>'<<'($a, $b)</php> | <php>$a << $b</php> | | |
| <php>'>>'($a, $b)</php> | <php>$a >> $b</php> | | | | <php>'>>'($a, $b)</php> | <php>$a >> $b</php> | | |
| <php>'=='($a, $b)</php> | <php>$a == $b</php> | | | | <php>'=='($a, $b)</php> | <php>$a == $b</php> | | |
| <php>'==='($a, $b)</php> | <php>$a === $b</php> | | | | <php>'==='($a, $b)</php> | <php>$a === $b</php> | | |
| <php>'!='($a, $b)</php> | <php>$a != $b</php> | | | | <php>'!='($a, $b)</php> | <php>$a != $b</php> | | |
| <php>'<>'($a, $b)</php> | <php>$a <> $b</php> | | | | <php>'<>'($a, $b)</php> | <php>$a <> $b</php> | | |
| <php>'!=='($a, $b)</php> | <php>$a !== $b</php> | | | | <php>'!=='($a, $b)</php> | <php>$a !== $b</php> | | |
| <php>'<'($a, $b)</php> | <php>$a < $b</php> | | | | <php>'<'($a, $b)</php> | <php>$a < $b</php> | | |
| <php>'>'($a, $b)</php> | <php>$a > $b</php> | | | | <php>'>'($a, $b)</php> | <php>$a > $b</php> | | |
| <php>'<='($a, $b)</php> | <php>$a <= $b</php> | | | | <php>'<='($a, $b)</php> | <php>$a <= $b</php> | | |
| <php>'>='($a, $b)</php> | <php>$a >= $b</php> | | | | <php>'>='($a, $b)</php> | <php>$a >= $b</php> | | |
| <php>'<=>'($a, $b)</php> | <php>$a <=> $b</php> | | | | <php>'<=>'($a, $b)</php> | <php>$a <=> $b</php> | | |
| <php>'&&'($a, $b)</php> | <php>$a && $b</php> | Can't short-circuit. | | | <php>'&&'($a, $b)</php> | <php>$a && $b</php> | Can't fully short-circuit. | |
| <php>'and'($a, $b)</php> | <php>$a and $b</php> | Can't short-circuit. | | | <php>'and'($a, $b)</php> | <php>$a and $b</php> | Can't fully short-circuit. | |
| <php>'||'($a, $b)</php> | <php>$a || $b</php> | Can't short-circuit. | | | <php>'||'($a, $b)</php> | <php>$a || $b</php> | Can't fully short-circuit. | |
| <php>'or'($a, $b)</php> | <php>$a or $b</php> | Can't short-circuit. | | | <php>'or'($a, $b)</php> | <php>$a or $b</php> | Can't fully short-circuit. | |
| <php>'xor'($a, $b)</php> | <php>$a xor $b</php> | | | | <php>'xor'($a, $b)</php> | <php>$a xor $b</php> | | |
| <php>'!'($a)</php> | <php>!$a</php> | | | | <php>'!'($a)</php> | <php>!$a</php> | | |
| <php>'.'($a, $b)</php> | <php>$a . $b</php> | | | | <php>'.'($a, $b)</php> | <php>$a . $b</php> | | |
| |
Since <php>pow()</php> already exists and behaves identically to how <php>'**'()</php> would, <php>'**'()</php> is simply an alias of it. | Since <php>pow()</php> already exists and behaves identically to how <php>'**'()</php> would, <php>'**'()</php> is simply an alias of it. |
The existing operators themselves behave the same as ever. | The existing operators themselves behave the same as ever. |
| |
Quoting function names in function calls is not new, it is a consequence of [[rfc:uniform_variable_syntax|Uniform Variable Syntax]]. | Being able to quote function names in function calls (e.g. <php>'+'(1, 1)</php>) is not a new idea introduced by this RFC, it has been possible since [[rfc:uniform_variable_syntax|Uniform Variable Syntax]] in PHP 7.0. |
| |
===== Future Scope ===== | ===== Future Scope ===== |