rfc:callable-types
Differences
This shows you the differences between two versions of the page.
Both sides previous revisionPrevious revisionNext revision | Previous revision | ||
rfc:callable-types [2016/04/26 17:26] – amendments regarding references, optional types, fix error messages nikita2206 | rfc:callable-types [2017/09/22 13:28] (current) – external edit 127.0.0.1 | ||
---|---|---|---|
Line 1: | Line 1: | ||
- | ====== PHP RFC: Callable | + | ====== PHP RFC: Callable |
* Version: 1.0 | * Version: 1.0 | ||
* Date: 2015-08-27 | * Date: 2015-08-27 | ||
* Authors: Nikita Nefedov < | * Authors: Nikita Nefedov < | ||
- | * Status: | + | * Status: |
* First Published at: http:// | * First Published at: http:// | ||
Line 195: | Line 195: | ||
</ | </ | ||
- | Optional parameters count just like any other arguments | + | Optional parameters count just like any other parameters |
<code php> | <code php> | ||
function foo(callable() $cb) { } | function foo(callable() $cb) { } | ||
Line 240: | Line 240: | ||
There' | There' | ||
+ | |||
+ | ==== Parameters with default values ==== | ||
+ | |||
+ | It's not possible to declare default value of a parameter in a callable prototype. Because currently PHP doesn' | ||
==== Syntax Choices ==== | ==== Syntax Choices ==== | ||
Line 331: | Line 335: | ||
function foo(callable($a, | function foo(callable($a, | ||
//... | //... | ||
+ | } | ||
+ | </ | ||
+ | |||
+ | ===== Reflection ===== | ||
+ | |||
+ | There are no BC-breaking changes in Reflection. | ||
+ | |||
+ | Here are the changes needed for reflection: | ||
+ | |||
+ | `ReflectionParameter:: | ||
+ | |||
+ | <code php> | ||
+ | class ReflectionCallableType extends ReflectionType | ||
+ | { | ||
+ | /** | ||
+ | * Tells whether it's just a `callable` hint or if it has a prototype `callable(something): | ||
+ | */ | ||
+ | public function hasPrototype(): | ||
+ | |||
+ | /** | ||
+ | * Returns a number of parameters required by a callable prototype | ||
+ | */ | ||
+ | public function getArity(): bool; | ||
+ | |||
+ | /** | ||
+ | * Returns an array of ReflectionCallableParameter instances | ||
+ | */ | ||
+ | public function getParameters(): | ||
+ | |||
+ | /** | ||
+ | * Tells whether the prototype has return type defined | ||
+ | */ | ||
+ | public function hasReturnType(): | ||
+ | |||
+ | /** | ||
+ | * Returns return type of the callable prototype | ||
+ | */ | ||
+ | public function getReturnType(): | ||
+ | |||
+ | /** | ||
+ | * Tells whether $value has compatible callable prototype. This is the easiest way | ||
+ | * to implement runtime-error-free compatibility checks at this point... | ||
+ | * Later we could implement it in the form of `instanceof` | ||
+ | */ | ||
+ | public function isA($value); | ||
+ | } | ||
+ | |||
+ | class ReflectionCallableParameter | ||
+ | { | ||
+ | /** | ||
+ | * Tells whether this callable parameter has a type | ||
+ | */ | ||
+ | public function hasType(): bool; | ||
+ | |||
+ | /** | ||
+ | * Returns a type of this callable parameter | ||
+ | */ | ||
+ | public function getType(): ReflectionType; | ||
+ | |||
+ | /** | ||
+ | * Tells whether callable parameter is named or not (e.g. callable(Foo $foo) vs callable(Foo)) | ||
+ | */ | ||
+ | public function hasName(): bool; | ||
+ | |||
+ | /** | ||
+ | * Returns name of the callable parameter | ||
+ | */ | ||
+ | public function getName(): string; | ||
+ | |||
+ | /** | ||
+ | * Whether this is by-val or by-ref parameter | ||
+ | */ | ||
+ | public function isPassedByReference(): | ||
+ | | ||
+ | /** | ||
+ | * Whether this is a variadic parameter | ||
+ | */ | ||
+ | public function isVariadic(): | ||
} | } | ||
</ | </ | ||
Line 385: | Line 467: | ||
while PHP lacks first class packages. | while PHP lacks first class packages. | ||
- | ==== Reflection API ==== | + | ===== Votes ===== |
- | An extension to the reflection API will be proposed in case the RFC is approved. | + | This RFC requires a 2/3 majority to pass. Vote started on May 23, 2016, ends June 6, 2016. |
- | + | ||
- | ===== Votes ===== | + | |
- | This RFC requires a 2/3 majority to pass. | + | <doodle title=" |
+ | * Yes | ||
+ | * No | ||
+ | </doodle> | ||
===== Patches and Tests ===== | ===== Patches and Tests ===== | ||
Line 423: | Line 506: | ||
- Scala | - Scala | ||
- Swift https:// | - Swift https:// | ||
- |
rfc/callable-types.1461691597.txt.gz · Last modified: 2017/09/22 13:28 (external edit)