rfc:functional-elements

Differences

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

Link to this comparison view

Next revision
Previous revision
rfc:functional-elements [2008/03/06 02:00] – Initial creation. Introduction, current use cases lstrojnyrfc:functional-elements [2017/09/22 13:28] (current) – external edit 127.0.0.1
Line 1: Line 1:
-====== Functional elements for object lists ======+This RFC is still in progress 
 +====== Functional elements to work with aggregations ======
 ==== Abstract ==== ==== Abstract ====
-A common pattern in PHP is iterating through a list of objects and executing certain methods of the function. 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.+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 examples ==== +==== Current usage patterns ==== 
-=== UC-1 ===+=== UC-1: Iterating over an aggregation of objects ===
 <code php> <code php>
 foreach ($list as $element) { foreach ($list as $element) {
Line 11: Line 12:
 </code> </code>
  
-=== UC-2 ===+=== UC-2: Iterating over an aggregation of objects and keeping the results ===
 <code php> <code php>
 $result = array(); $result = array();
Line 19: Line 20:
 </code> </code>
  
-=== UC-3 ===+=== UC-3: Iterating over an aggregation of objects and conditionally executing a method ===
 <code php> <code php>
 foreach ($list as $element) { foreach ($list as $element) {
Line 28: Line 29:
 </code> </code>
  
-=== UC-4 ===+=== UC-4: Iterating over an aggregation of objects and conditionally executing a method while keeping the results ===
 <code php> <code php>
 $result = array(); $result = array();
Line 37: Line 38:
 } }
 </code> </code>
 +
 +
 +
 +==== Required functionality ====
 +Extracting the required functionality to leads to the following required additions:
 +  * [[rfc:functional-elements:call-iterator|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
 +  * [[rfc::functional-elements:is-traversable|function is_traversable()]]: Returns true if a list is traversable (Iterator/IteratorAggregate/array)
 +  * [[rfc:functional-elements:iterate|function iterate()]]: Walks over a traversable list and does nothing
 +  * function iterator_true(): Walks over a traversable list and assumes every element to be bool(true)
 +  * function iterator_false(): Walks over a traversable list and assumes every element to be bool(false)
 +
 +==== Modified use cases ====
 +=== UC-1: Iterating over an aggregation of objects ===
 +<code php>
 +iterate(new CallIterator($list, 'method'));
 +</code>
 +
 +=== UC-2: Iterating over an aggregation of objects and keeping the results ===
 +<code php>
 +$result = iterate(new CallIterator($list, 'method'), true);
 +</code>
 +
rfc/functional-elements.1204768842.txt.gz · Last modified: 2017/09/22 13:28 (external edit)