rfc:user_defined_operator_overloads
Differences
This shows you the differences between two versions of the page.
Both sides previous revisionPrevious revisionNext revision | Previous revision | ||
rfc:user_defined_operator_overloads [2021/12/11 09:34] – typo jordanrl | rfc:user_defined_operator_overloads [2022/01/17 01:16] (current) – closed voting jordanrl | ||
---|---|---|---|
Line 3: | Line 3: | ||
* Date: 2021-08-14 | * Date: 2021-08-14 | ||
* Author: Jordan LeDoux, jordan.ledoux@gmail.com | * Author: Jordan LeDoux, jordan.ledoux@gmail.com | ||
- | * Status: | + | * Status: |
* First Published at: http:// | * First Published at: http:// | ||
Line 101: | Line 101: | ||
This is avoided by allowing the restrictions on operator names to be separated from the restrictions on function names. | This is avoided by allowing the restrictions on operator names to be separated from the restrictions on function names. | ||
- | === Non-Callable === | + | === Callable === |
- | Operand implementations | + | Operand implementations |
<code php> | <code php> | ||
- | // These all should result in an error | + | // These all will work normally |
- | $obj->' | + | $op = ' |
+ | $callable = [$obj, ' | ||
+ | |||
+ | // Calls on the object variable | ||
+ | $obj->{' | ||
+ | $obj-> | ||
+ | $callable(1, | ||
+ | |||
+ | // Calls using call_user_func | ||
call_user_func([$obj, | call_user_func([$obj, | ||
+ | call_user_func($callable, | ||
+ | |||
+ | // This will error since + is not static | ||
call_user_func(' | call_user_func(' | ||
+ | </ | ||
+ | |||
+ | They can be also be directly invoked with a Closure however. This fully supports Reflection, and allows direct calls. | ||
+ | |||
+ | <code php> | ||
+ | // Manually creating a closure allows a direct function call | ||
+ | $closure = Closure:: | ||
+ | $closure(1, OperandPosition:: | ||
+ | |||
+ | // You can also retrieve the closure through Reflection | ||
+ | $closure = (new ReflectionMethod($obj, | ||
+ | $closure(1, OperandPosition:: | ||
+ | |||
+ | $closure = (new ReflectionObject($obj))-> | ||
+ | $closure(1, OperandPosition:: | ||
</ | </ | ||
Line 657: | Line 683: | ||
This RFC deals with allowing each class to define its own interaction with operators. However, if overloading the operator itself were desired for the entire application, | This RFC deals with allowing each class to define its own interaction with operators. However, if overloading the operator itself were desired for the entire application, | ||
- | ===== Proposed Voting Choices | + | ==== Functions for Operators |
- | Add limited user-defined | + | Having functions for operators may be beneficial when objects which use operator overloads are used in conjunction with functions like '' |
+ | |||
+ | <code php> | ||
+ | array_reduce($arrOfObjs, | ||
+ | </ | ||
+ | |||
+ | These could be polyfilled in PHP currently: | ||
+ | |||
+ | <code php> | ||
+ | array_reduce($arrOfObjs, | ||
+ | </ | ||
+ | |||
+ | ==== Query Builder Improvements | ||
+ | With some additional improvements, | ||
+ | |||
+ | <code php> | ||
+ | $qb-> | ||
+ | </code> | ||
+ | |||
+ | ==== Enum Return Type For <=> ==== | ||
+ | |||
+ | Returning an enum for the <=> would be preferable for two reasons. | ||
+ | |||
+ | - It allows the function to return an equivalent of ' | ||
+ | - It is easier | ||
+ | |||
+ | This is listed as future scope because there is a separate RFC which covers this feature: https:// | ||
+ | |||
+ | It is listed as a separate RFC because it is something that could be delivered whether or not this RFC passes. | ||
===== Patches and Tests ===== | ===== Patches and Tests ===== | ||
Line 670: | Line 724: | ||
- a link to the language specification section (if any) | - a link to the language specification section (if any) | ||
- | ===== References | + | ===== Proposed Voting Choices |
+ | Add limited user-defined operator overloads as described: yes/no. A 2/3 vote is required to pass. | ||
+ | |||
+ | ===== Vote ===== | ||
+ | |||
+ | Voting started 2022-01-03 at 00:15 UTC and will end 2022-01-17 at 00:15 UTC. | ||
+ | <doodle title=" | ||
+ | * Yes | ||
+ | * No | ||
+ | </ | ||
===== Changelog ===== | ===== Changelog ===== |
rfc/user_defined_operator_overloads.txt · Last modified: 2022/01/17 01:16 by jordanrl