Tach!
Das sind Type Hints http://php.net/manual/en/language.oop5.typehinting.php und nur dazu da dass man weiß welchen Typ diese Argumente sein sollten.
Ja, aber PHP prüft auch darauf. Ansonsten wäre der Type Hint funktionslos und es hätte auch ein Kommentar getan.
PHPs foreach funktioniert nicht nur mit array sondern mit jedem Objekt das das IteratorAggregate-Interface implementiert (array tut das auch).
Nein zum Klammernzusatz, array ist kein Objekt. Das konnte man schon iterieren, lange bevor es die SPL-Erweiterung und damit Iterator(Aggregate) gab. Die SPL hat nur die Iterierbarkeit dem OOP-Teil PHPs hinzugefügt.
var_dump(array() instanceof Traversable); ergibt false.
Wenn PHP-Arrays Iterator(Aggregate) implementiert hätten, müsste das true ergeben.
$my_array = array(1,2,3,4);
$iterator = $my_array.getIterator();
while($item = $iterator.next()) {
echo $item;
}
>
> wäre das gleiche wie:
>
> ~~~php
$my_array = array(1,2,3,4);
> foreach($my_array as $item) {
> echo $item;
> }
Theoretisch ja, praktisch geht's nicht.
dedlfix.