Ik heb een recursieve functie waarmee ik de weg van een node tot aan de top van de boom naga. De output van de functie zijn twee variabelen: $menu (een xhtml correcte lijst met menu items) en $trail (de cookie crumb trail, bv. home > groenten > witlof). Schematisch:
Nu ben ik mijn applicatie aan het verbouwen en wil zoveel mogelijk af van globals. Op het einde van mijn applicatie vul ik een template, en wil meer iets als:
Maar als ik een variabele wil vullen met de output van een functie, betekent het dat ik een aparte recursieve functie moet maken om de xhtml menu list te vormen, en een aparte functie om $trail te vullen. Dat kost me dus twee keer zoveel performance en queries dan nu het geval is, maar ik zie niet hoe dit in een keer zou kunnen. Mijn vraag is dan ook: doen jullie, uit het oogpunt van overzichtelijkheid, soms wel eens dingen twee keer, hoewel het eigenlijk samengevoegd zou kunnen worden in 1 functie? Hoe zou jij bovenstaande situatie oplossen?
PHP:
1
2
3
4
5
6
7
8
9
10
| function menu($pid=1, $level=0) { global $menu; global $tree; $result = db_query("SELECT * FROM nodes WHERE ..."); ... $menu .= '<li>'.$node['title'].'</li>'; $trail.= '>'.$node['title']; } |
Nu ben ik mijn applicatie aan het verbouwen en wil zoveel mogelijk af van globals. Op het einde van mijn applicatie vul ik een template, en wil meer iets als:
PHP:
1
2
3
4
5
6
7
8
9
| $menu = menu(1, 0); $trail = trail(1, 0); $temp = '<html><body>{trail}<br><br>{menu}</body></html>'; $tags = array('{menu}', '{trail}'); $repl = array($menu, $trail); $html = str_replace ($tags, $repl, $temp); echo $html; |
Maar als ik een variabele wil vullen met de output van een functie, betekent het dat ik een aparte recursieve functie moet maken om de xhtml menu list te vormen, en een aparte functie om $trail te vullen. Dat kost me dus twee keer zoveel performance en queries dan nu het geval is, maar ik zie niet hoe dit in een keer zou kunnen. Mijn vraag is dan ook: doen jullie, uit het oogpunt van overzichtelijkheid, soms wel eens dingen twee keer, hoewel het eigenlijk samengevoegd zou kunnen worden in 1 functie? Hoe zou jij bovenstaande situatie oplossen?
[ Voor 24% gewijzigd door Reveller op 02-11-2004 14:46 ]
"Real software engineers work from 9 to 5, because that is the way the job is described in the formal spec. Working late would feel like using an undocumented external procedure."