rfc:callable

Differences

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

Link to this comparison view

Next revision
Previous revision
Next revisionBoth sides next revision
rfc:callable [2011/06/07 13:53] – created bjorirfc:callable [2011/07/27 09:05] bjori
Line 1: Line 1:
-====== Request for Comments: How to write RFCs ======+====== Request for Comments: callable type hint ======
   * Version: 1.0   * Version: 1.0
   * Date: 2011-06-07   * Date: 2011-06-07
Line 12: Line 12:
 Frameworks have started to adopt Closures for callbacks, utilizing the 'Closure' typehint. Frameworks have started to adopt Closures for callbacks, utilizing the 'Closure' typehint.
 That has an unfortunate sideeffect of requiring already-existing-methods to be wrapped into a closure calling that method. That has an unfortunate sideeffect of requiring already-existing-methods to be wrapped into a closure calling that method.
 +Additionally, the PHP documentation on closures indicates that the "Closure" class is considered an implementation detail, and may be subject to change in the future -- which means that typehinting on Closure may break in the future.
  
 ===== The solution ===== ===== The solution =====
Line 18: Line 19:
  
 The typehint would allow a string with a function name, an array composed of classname/obj+methodname, and a closure. The typehint would allow a string with a function name, an array composed of classname/obj+methodname, and a closure.
 +
 +===== Callable vs Callback =====
 +
 +callback is callable, the opposite could not be true. A string, or a closure, is callable, but the string is not a callback.
 +
 +The documentations already use `array` hinting when a function expects an array, even though it does not type hint on it.
 +The documentations already use `callable` hiting when a function expects a callable instance, even though it does not type hint on it.
 +
 +Furthermore we already have a function called is_callable(), and this new feature will share its implementation.
 +
 +Introducing a different name (i..e callback) will therefore only create more inconsistencies and confusion.
 +
 +The callable typehint reuses the is_callable() logic.
 +
 +===== Initialization =====
 +
 +Only null initialize is allowed, making it consistent with classname typehinting.
 +
  
  
Line 33: Line 52:
  
   * The only arguments against the idea came from Stas, [[http://php.markmail.org/message/hhdjdfo3o34mcj2t?q=callable|making the argument]];   * The only arguments against the idea came from Stas, [[http://php.markmail.org/message/hhdjdfo3o34mcj2t?q=callable|making the argument]];
-    * 'callable' are nothing different then 'balanced binary tree' and 'readable file', and none of them make sense to have typehints for+    * 'callable' is a data structure not unlike 'balanced binary tree' and 'readable file', and none of them make sense have as a part of the language syntax. They belong in userspace.  
-    * A "strict typing error" is hard to handle in user-space gracefully +    * A "strict typing error" is hard to handle in user-space gracefully. 
-  * Everyone else seem to like the idea.+  * Everyone else seem to like the idea, so far.
   * As for the patch itself, Felipe pointed out that the patch is missing an method in ext/reflection to retrieve the typehint information.   * As for the patch itself, Felipe pointed out that the patch is missing an method in ext/reflection to retrieve the typehint information.
 +  * Things to finalize:
 +    * Reflection support
 +    * Arginfo support
  
  
Line 42: Line 64:
  
   * June 7th 2011, Initial writeup   * June 7th 2011, Initial writeup
 +  * July 27th 2011, Added "callable vs callback" and "initialization" section
 +
  
rfc/callable.txt · Last modified: 2017/09/22 13:28 by 127.0.0.1