rfc:intersection_types

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:intersection_types [2016/04/27 17:23] – created levimrfc:intersection_types [2016/04/27 17:56] levim
Line 27: Line 27:
     }     }
 } }
 +
 +// Fatal error: Uncaught TypeError: Argument 1 passed to RecordsToList() must be Countable and Traversable, array given, called in %s on line %d
 +echo RecordsToList(["Lennon", "McCartney", "Starr", "Harrison"]);
 +
 +// Fine:
 +echo RecordsToList(new ArrayObject(["Lennon", "McCartney", "Starr", "Harrison"]));
 +// Output:
 +// <ol>
 +//     <li>Lennon</li>
 +//     <li>McCartney</li>
 +//     <li>Starr</li>
 +//     <li>Harrison</li>
 +// </ol>
 +
 </PHP> </PHP>
 +
 +Note that if [[rfc:union_types|Union Types]] are also accepted then something like this will be possible, allowing for an array or an object that satisfies both Countable and Traversable:
 +<PHP>
 +function RecordsToList(Array | (Countable & Traversable) $input): String {
 +    if (count($input) > 0) {
 +        $output = "<ol>\n";
 +        foreach ($input as $value) {
 +            $output .= "\t<li>" . htmlentities($value) . "</li>\n";
 +        }
 +        $output .= "</ol>\n";
 +        return $output;
 +    } else {
 +        return "<p>No items to display.</p>\n";
 +    }
 +}
 +</PHP>
 +
 +When union and intersection types are in the same expression they must be grouped with parenthesis (demonstrated above). The following is invalid:
 +
 +<PHP>
 +function RecordsToList(Array | Countable & Traversable): String {
 +    // ...
 +}
 +</PHP>
 +
  
 ===== Backward Incompatible Changes ===== ===== Backward Incompatible Changes =====
rfc/intersection_types.txt · Last modified: 2017/09/22 13:28 by 127.0.0.1