Autor Zpráva
Amunak
Profil
Zdravím, udělal jsem si jednoduchou třídu menu která přijímá instance položek menu. Pro výpis by se mi hodilo mít přímý přístup k těmto položkám-objektům v cyklu, například:
$menuItems = array(
    'uvod' => new MenuItem('/uvodni-stranka/', 'Úvod'),
    'kontakt' => new MenuItem('/kontakt/', 'Kontaktní informace')
);

$menu = new Menu($menuItems);

echo 'Seznam odkazů v menu:<br>';
foreach ($menu as $menuItem)
{
  echo $menuItem->getLink().'<br>';
}

Něco takového umí třeba dibi, ovšem z jejího kódu jsem nebyl schopný vykoukat jak to dělá.
Keeehi
Profil
http://php.net/manual/en/language.oop5.iterations.php
Majkl578
Profil
Často se používá IteratorAggregate, stejně tak to dělá i DibiResult. Ty budeš nejspíš položky předané konstruktorem uchovávat v poli v nějaké vlastnosti, pak můžeš použít IteratorAggregate v kombinaci s ArrayIterator:

public function getIterator()
{
    return new \ArrayIterator($this->items);
}
Amunak
Profil
Díky Keeehi. Ani nevím, jak jsem na to při hledání mohl nenarazit. Ta varianta co je v příkladu na PHP.net mi vyhovuje víc, protože můžu do cyklu strčit přímo ten objekt a nemusím volat metodu.
To je taky pěkná blbost co jsem napsal. Protože mám ty položky jako pole v jedné vlastnosti, tak můžu použít ten IteratorAggregate. Díky oběma.


Ještě se zeptám - proč před název té třídy dávat lomítko?
Lamicz
Profil
Protože Namespaces
Pokud je nepoužíváš, nemusíš je psát

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm:

0