rfc:arrayof
Differences
This shows you the differences between two versions of the page.
Both sides previous revisionPrevious revisionNext revision | Previous revision | ||
rfc:arrayof [2014/01/15 20:01] – philstu | rfc:arrayof [2017/09/22 13:28] (current) – external edit 127.0.0.1 | ||
---|---|---|---|
Line 1: | Line 1: | ||
====== PHP RFC: Array Of ====== | ====== PHP RFC: Array Of ====== | ||
- | * Version: 0.1.0 | + | * Version: 0.2.0 |
* Date: 2014-01-15 | * Date: 2014-01-15 | ||
* Author: Joe Watkins, krakjoe@php.net & Phil Sturgeon philstu@php.net | * Author: Joe Watkins, krakjoe@php.net & Phil Sturgeon philstu@php.net | ||
- | * Status: | + | * Status: |
* First Published at: http:// | * First Published at: http:// | ||
Line 21: | Line 21: | ||
</ | </ | ||
- | The square brackets allow type-hinting for an array where each value is of a specific type. This is handy when simply type-hinting with " | + | The square brackets allow type-hinting for an array where each value is of a specific type. This is handy when simply type-hinting with " |
Default values can still be used: | Default values can still be used: | ||
Line 118: | Line 118: | ||
===== Unaffected PHP Functionality ===== | ===== Unaffected PHP Functionality ===== | ||
- | This RFC has no effect on [[https:// | + | This RFC has no effect on [[https:// |
This also does not attempt to allow Traversable or other objects implementing interfaces to be considered an " | This also does not attempt to allow Traversable or other objects implementing interfaces to be considered an " | ||
+ | |||
+ | ===== Closed Questions ===== | ||
+ | |||
+ | 1. Should multi-dimensional hints be allowed? | ||
+ | |||
+ | <code php> | ||
+ | function test(Foo[][] $files = null) {} | ||
+ | </ | ||
+ | |||
+ | The general consensus seemed to be that instead of using " | ||
+ | |||
+ | |||
+ | 2. RFC suggested syntax, or Hack Generics syntax? | ||
+ | |||
+ | With this features close proximity to the " | ||
+ | |||
+ | http:// | ||
+ | |||
+ | Java has both features, with their own syntax. This means there is no reason for us to hold off implementing with the existing syntax and looking into adding generics as well, at a later date. | ||
+ | |||
+ | If people want to change the syntax of this feature more in line with Hack generics syntax then simply vote no, and we can revisit the issue. | ||
+ | |||
+ | 3. The RFC is currently // | ||
+ | |||
+ | <code php> | ||
+ | foreach ($foos as $foo) { | ||
+ | if (! $foo instanceof Face) { | ||
+ | throw new Exception (' | ||
+ | } | ||
+ | } | ||
+ | </ | ||
+ | |||
+ | Some have suggested they would prefer nulls to be allowed in the array, so the syntax would instead represent the following: | ||
+ | |||
+ | <code php> | ||
+ | foreach ($foos as $foo) { | ||
+ | if (! is_null($foo) and ! $foo instanceof Face) { | ||
+ | throw new Exception (' | ||
+ | } | ||
+ | } | ||
+ | </ | ||
+ | |||
+ | The downside here is that before anyone can confidently interact with a type array of what one would assume are instances, they need to do a array_filter() first. | ||
+ | |||
+ | Logic here would dictate that if you ask for a bag of spanners, you get a bag of spanners, not a bag with a few spanners and maybe a few "I owe you one spanner" | ||
+ | |||
+ | Multiple people suggested that by default allowing nulls would make this feature useless, and that syntax could be added for the alternative. This syntax can be addressed in a later RFC but could be as simple as function (Foo[]? $foos). Undecided at this point. | ||
===== Backward Incompatible Changes ===== | ===== Backward Incompatible Changes ===== | ||
Line 129: | Line 176: | ||
PHP 5.6 | PHP 5.6 | ||
+ | |||
+ | ===== Vote ===== | ||
+ | |||
+ | VOTE: 2014/02/28 - 2014/03/07 | ||
+ | |||
+ | <doodle title=" | ||
+ | * Yes | ||
+ | * No | ||
+ | </ | ||
+ | |||
===== Implementation ===== | ===== Implementation ===== | ||
Line 136: | Line 193: | ||
[[https:// | [[https:// | ||
- | ===== References | + | ===== Performance |
+ | https:// | ||
+ | |||
+ | ===== References ===== | ||
+ | [[http:// | ||
+ | [[http:// |
rfc/arrayof.txt · Last modified: 2017/09/22 13:28 by 127.0.0.1