rfc:functional-elements
This is an old revision of the document!
This RFC is still in progress
Functional elements to work with aggregations
Abstract
A common pattern in PHP is iterating through a list of objects and executing certain methods of the objects. This is especially common when it comes to 1:n-relations (e.g. one object, n adapters). This proposal is meant to abstract those iterations in convenient functional constructs by adding method call iterators and iterator functions.
Current usage patterns
UC-1: Iterating over an aggregation of objects
foreach ($list as $element) { $element->method(); }
UC-2: Iterating over an aggregation of objects and keeping the results
$result = array(); foreach ($list as $element) { $result[] = $element->method(); }
UC-3: Iterating over an aggregation of objects and conditionally executing a method
foreach ($list as $element) { if ($element->conditionalMethod()) { $element->method(); } }
UC-4: Iterating over an aggregation of objects and conditionally executing a method while keeping the results
$result = array(); foreach ($list as $element) { if ($element->conditionalMethod()) { $result[] = $element->method(); } }
Required functionality
Extracting the required functionality to leads to the following required additions:
- class CallIterator: a simple iterator which walks over a traversable list (including arrays) and calls a specified method. The CallIterator might optionally gather the results
- function is_traversable(): Returns true if a list is traversable (Iterator/IteratorAggregate/array)
- function iterate(): Walks over a traversable list and does nothing
- function iterator_true(): Walks over a traversable list and assumes every element to be true
- function iterator_false(): Walks over a traversable list and assumes every element to be false
rfc/functional-elements.1205677567.txt.gz · Last modified: 2017/09/22 13:28 (external edit)