[PHP] Functie output twee variabelen

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • Reveller
  • Registratie: Augustus 2002
  • Laatst online: 05-12-2022
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:
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.= '&gt;'.$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."


Acties:
  • 0 Henk 'm!

  • 4Real
  • Registratie: Juni 2001
  • Laatst online: 14-09-2024
PHP:
1
list($var1, $var2) = functiediejeaanroept();

[ Voor 3% gewijzigd door 4Real op 02-11-2004 14:45 ]


Acties:
  • 0 Henk 'm!

  • Reveller
  • Registratie: Augustus 2002
  • Laatst online: 05-12-2022
@4Real - hoe bedoel je dat precies? Het volgende werkt niet en op php.net staat geen voorbeeld met een functie:
PHP:
1
2
3
4
5
6
7
8
9
function this()
{
  $var1 = 'menu!!';
  $var2 = 'trail!!';
}

list($menu, $trail) = this();

echo $trail;

Dit werkt namelijk niet. Er verschijnt niets op het scherm...

"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."


Acties:
  • 0 Henk 'm!

  • 4Real
  • Registratie: Juni 2001
  • Laatst online: 14-09-2024
PHP:
1
2
3
4
5
6
7
8
9
10
11
function this()
{
  $var1 = 'menu!!';
  $var2 = 'trail!!';

  return array($var1, $var2);
}

list($menu, $trail) = this();

echo $trail;



kan het zo niet testen maar volgens mij is het zo goed

Acties:
  • 0 Henk 'm!

  • Bosmonster
  • Registratie: Juni 2001
  • Laatst online: 18-09 16:28

Bosmonster

*zucht*

Je kunt een array teruggeven, maar iets netter is een los objectje maken met 2 eigenschappen en daar een instantie van teruggeven.

Maar goed.. als de rest van je app niet OO is moet een array wel volstaan.

[ Voor 24% gewijzigd door Bosmonster op 02-11-2004 15:13 ]


Acties:
  • 0 Henk 'm!

  • mrFoce
  • Registratie: Augustus 2004
  • Laatst online: 09-09 17:18
Hoezo wil je zo graag af van die globals ?

( je spreekt hier niet over de 'verouderde' superglobals die 'eigenlijk' niet meer horen )
Pagina: 1