Antwort an „Rolf B“ verfassen

Hallo,

Das schreit doch nach einer globalen Definition.

wenn man schon globale Variablen verwenden möchte, finde ich das explizite Bekanntmachen innerhalb der Funktion mit dem global-Keyword sauberer

Abe es ist immer noch der Unterschied zwischen Ölschmier an den Fingern und triefendem Schmodder. $_GLOBALS sollte man einfach ignorieren. Und globale Variablen dringend vermeiden.

Ich muss aber auch eingestehen, dass es in PHP ohne radikale Objektorientierung mühsam ist, auf globale Variablen zu verzichten.

$current === null || $current === 'game' ? 'current' : ''

Hier würde ich definitiv dazu raten, $current bei der Initialisierung gleich auf 'game' zu setzen, wenn nichts drinsteht. Die Funktionen für die Menüpunkte werden von irgendwas aufgerufen. Dieses irgendwas sollte selbst eine Funktion sein (build_menu oder ähnlich), und in build_menu sollte sowas stehen wie

   $current = $_GET['subpage'] ?? 'game';  // <-- NULL gar nicht erst entstehen lassen!
   $menus = [ 'game', 'releases', 'merchandise', ...., 'savegame' ];
   if (!in_array($current, $menus))
      $current = 'game';
   for ($menus as $menu) {
      ("menu_$menu)($current == $menu);
   }
   ...

   function menu_game($isCurrent)
   {
?>
     <a <?= $isCurrent ? 'aria-current="page"' : '' ?> href='...'>Game</a>
<?php
   }

Der Funktionsaufruf mit ("menu_$menu)() funktioniert ab PHP 7.

  • Name der Funktion ist vom externen Namen entkoppelt. Wenn auch nur leicht. Noch besser wäre eine echte Map.
  • Subpage wird geprüft, ob es ein gültiger Name ist
  • Prüfung, ob der Menüpunkt die aktuelle Seite ist, ist zentralisiert und aus den Menüfunktionen entfernt

Mit der Map meine ich:

   $menus = [ 'game' => 'menu_game',
              'releases' => 'menu_releases',
              'merchandise' => 'menu_mechandise',
              ....,
              'savegame' => 'menu_savegame' 
            ];
   if (!array_key_exists($current, $menus))
      $current = 'game';

   for ($menus as $menuId => $menuHandler) {
      $menuHandler($current == $menuId);
   }

Je länger man über etwas nachdenkt, desto mehr Abstraktionen fallen einem ein...

Rolf

--
sumpsi - posui - obstruxi
freiwillig, öffentlich sichtbar
freiwillig, öffentlich sichtbar
freiwillig, öffentlich sichtbar

Ihre Identität in einem Cookie zu speichern erlaubt es Ihnen, Ihre Beiträge zu editieren. Außerdem müssen Sie dann bei neuen Beiträgen nicht mehr die Felder Name, E-Mail und Homepage ausfüllen.

abbrechen