rfc:callable-interfaces

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revisionPrevious revision
Next revision
Previous revision
Last revisionBoth sides next revision
rfc:callable-interfaces [2016/04/06 11:58] – Adding question about instanceof usage ocramiusrfc:callable-interfaces [2016/04/12 10:11] – Retiring RFC due to incompatible object -> function semantics mixup ocramius
Line 4: Line 4:
   * Author: Ben Scholzen, mail@dasprids.de   * Author: Ben Scholzen, mail@dasprids.de
   * Author: Marco Pivetta, ocramius@gmail.com   * Author: Marco Pivetta, ocramius@gmail.com
-  * Status: Draft+  * Status: Retired
   * First Published at: http://wiki.php.net/rfc/callable-interfaces   * First Published at: http://wiki.php.net/rfc/callable-interfaces
  
Line 112: Line 112:
 ===== Still Open for Discussion ===== ===== Still Open for Discussion =====
  
- * how will **instanceof** behave, when asked for a type-check against **callable**?+How will **instanceof** behave, when asked for a type-check against **callable**? 
 + 
 +<code php> 
 +interface RegisterUser { 
 +    public function __invoke(Username $username) : UserRegistration; 
 +
 + 
 +interface DeleteUserRegistration { 
 +    public function __invoke(Username $username) : UserRegistration; 
 +
 + 
 +$register = function (Username $username) : UserRegistration { 
 +    return new UserRegistration(...); 
 +}; 
 + 
 +var_dump($register instanceof DeleteUserRegistration); // true? false? possibly want to keep current semantics here. 
 +</code> 
 + 
 +===== Retired ===== 
 + 
 +This RFC has been retired. Reason for that is that PHP currently (Version 7.0~7.1) allows applying function semantics to objects via the **_****_invoke** magic methods. Allowing the opposite would mix the domain of functions and objects in ways that are very hard to disentangle, and it would needlessly complicate the language semantics. 
 + 
 +While it is unfortunate that migration to type-safe callables (https://wiki.php.net/rfc/typesafe-callable) would require some interface rewrites, that is indeed the correct solution, as it keeps the uni-directionality between object and function semantics.
  
 ===== Backward Incompatible Changes ===== ===== Backward Incompatible Changes =====
rfc/callable-interfaces.txt · Last modified: 2017/09/22 13:28 by 127.0.0.1