Rolf B: PHP function: Wie umgehe ich, dass eine Variable jedes Mal erneut definiert werden muss?

Beitrag lesen

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
0 60

PHP function: Wie umgehe ich, dass eine Variable jedes Mal erneut definiert werden muss?

borisbaer
  • php
  1. 0
    Rolf B
    1. 0
      borisbaer
      1. 1
        Raketenwilli
        • php
        • programmiertechnik
        • programmplanung
        1. 0
          borisbaer
          1. 0
            Raketenwilli
            1. 0
              borisbaer
              1. 0
                Raketenwilli
                1. 0
                  borisbaer
                  1. 0
                    borisbaer
                    1. 0
                      Raketenwilli
                      1. 0
                        borisbaer
                        1. 1

                          PHP-Syntax: Anführungszeichen

                          Gunnar Bittersmann
                          • php
                          1. 0
                            Der Martin
                            • programmierstil
                            • syntax
                            1. 1
                              Raketenwilli
                              1. 0
                                Der Martin
                              2. 0

                                Mein höchstpersönlicher Monk bricht aus mir heraus

                                Auge
                                • menschelei
                                • programmierstil
                                • syntax
                                1. 0
                                  Gunnar Bittersmann
                                  • menschelei
                                  1. 0
                                    Auge
                                2. 0
                                  Raketenwilli
                              3. 0
                                borisbaer
                            2. 0
                              Gunnar Bittersmann
                          2. 0
                            borisbaer
                        2. 0
                          Tabellenkalk
                          1. 0
                            Raketenwilli
                          2. 1
                            Gunnar Bittersmann
                            • php
                            • programmierstil
                            1. 0
                              Tabellenkalk
                              1. 0
                                Gunnar Bittersmann
                            2. 0
                              borisbaer
                              1. 0

                                Sollte, hyperliquide Prüfung

                                Raketenwilli
                                1. 0
                                  Raketenwilli
                                  1. 0
                                    Rolf B
                                    1. 1
                                      Raketenwilli
                                2. 0
                                  borisbaer
                                  1. 0
                                    Raketenwilli
                                    1. 0
                                      Rolf B
                                      1. 0
                                        Raketenwilli
                                        1. 0
                                          Rolf B
                                        2. 0
                                          Der Martin
                                          • dateisystem
                                          • meinung
                                          1. 0
                                            Gunnar Bittersmann
                                            • cms
                                            • dateisystem
                                      2. 0
                                        borisbaer
                              2. 1
                                Rolf B
                                1. 0
                                  borisbaer
                                  1. 0
                                    Rolf B
                                    1. 0
                                      Tabellenkalk
                                    2. 0
                                      Der Martin
                                      • menschelei
                        3. 1
                          Rolf B
                          1. 0
                            Der Martin
    2. 0
      Der Martin
      1. 0
        borisbaer
        1. 0
          Der Martin
          1. 0
            borisbaer
            1. 0
              Der Martin
              1. 0
                Rolf B
        2. 1
          Gunnar Bittersmann
          • aria
          • php
          1. 1
            Gunnar Bittersmann
            • php
            • sicherheit
          2. 0
            borisbaer
            1. 0
              Gunnar Bittersmann
  2. 0
    Rolf B
    1. 0
      Gunnar Bittersmann
      • barrierefreiheit