globale Variablen & oo-Ansatz

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • globale Variablen & oo-Ansatz

    Hi Leutz,

    ich muss mich jetzt mal an euch wenden. Habe an anderer Stelle mal ne Codestrecke mit einer Frage dazu veröffentlicht, und bekam von allen Seiten nur Buh-Rufe: Globale Variablen...das macht man nicht, schlechter Stil...die müssen weg!

    BSP:
    PHP-Code:
    error_reporting (E_ALL);

    ini_set("display_errors"TRUE);

    class 
    functions {

        function 
    getMainCat($cat)
            {
            global 
    $lang;
            
    $db1 = new dbconn(hostuserpassname);

            if (empty(
    $cat)) {
                return 
    $lang["leftcontent"]["navigation"];
            } else {
                
    $sql "select * from " tbl_catalog " where cat_id='$cat'";
                
    $result $db1->query($sql);

                while (
    $data mysql_fetch_assoc($result))
                    if (
    $data["cat_parent_id"]) {
                        return 
    $this->getMainCat($data["cat_parent_id"]);
                    } else {
                        return 
    $data["cat_description"];
                    }
            }
            } 
    nun muss ich aber auf z.b. auf diverse Sprachpakete zurückgreifen. Die befinden sich in einem Ordner lang:
    BSP:
    PHP-Code:
    $lang["secondary_nav"]["Warenkorb"] = "Warenkorb";
    $lang["secondary_nav"]["Konto"] = "Mein Konto";
    $lang["secondary_nav"]["Versandkosten"] = "Versandkosten"
    Aber auch in der config befinden sich best. Array-Vars auf die u.U. zurückgegriffen werden muss. Die hab ich bis dato immer als globale Variablen eingebunden.
    Antwort/ Verbesserungsvorschläge habe ich von diesen Nörglern nicht bekommen.
    Vielleicht kann mir hier jemand sagen, warum meine Vorgehensweise soooooooo böse & schlecht ist und vor allem, wie ich es anders machen könnte

    mfG
    derTrallala
    Manchmal verliert ma eben ... und manchmal gewinnen die Anderen

  • #2
    Schlecht ist es, weil du dir bspw. die Möglichkeit nimmst, $lang mal in $language_array umzubenennen ohne gleich an tausenden Stellen Anpassungen vornehmen zu müssen.

    Besser machen könntest du es, indem du das Array $lang in ein Attribut der Klasse schreibst und innerhalb der Klasse dann mit diesem Attribut arbeitest.
    Ich denke, also bin ich. - Einige sind trotzdem...

    Kommentar


    • #3
      Besser machen könntest du es, indem du das Array $lang in ein Attribut der Klasse schreibst und innerhalb der Klasse dann mit diesem Attribut arbeitest. [/B]
      nur dass ich dich nicht missverstehe:
      PHP-Code:
      class functions  {
                
      $lang=array();
      ... 
      und dann global $lang entfernen?
      Manchmal verliert ma eben ... und manchmal gewinnen die Anderen

      Kommentar


      • #4
        ja, und irgendwo bevor du mit der Klasse arbeitest einmal
        PHP-Code:
        $instanz_der_klasse->lang $lang
        Ich denke, also bin ich. - Einige sind trotzdem...

        Kommentar


        • #5
          ich glaube er meint....

          PHP-Code:
          class foo {
            private 
          $lang;

            function 
          __constructor($lang){
              
          $this->lang $lang;
            }

            function 
          bar(){
              echo 
          $lang['bar'];
            }

          }



          $foo = new foo($language_array); 
          EDIT:
          tststs... während dem schreiben kommt der hapiness daher

          Kommentar


          • #6
            na denn danke!
            Manchmal verliert ma eben ... und manchmal gewinnen die Anderen

            Kommentar


            • #7
              Original geschrieben von prego
              ich glaube er meint....

              PHP-Code:
              class foo {
                private 
              $lang
              gibts private nicht erst ab php 5?
              Manchmal verliert ma eben ... und manchmal gewinnen die Anderen

              Kommentar


              • #8
                __constructor auch...


                PHP-Code:
                //PHP5
                class foo {
                  private 
                $lang;

                  function 
                __constructor($lang){
                    
                $this->lang $lang;
                  }

                  function 
                bar(){
                    echo 
                $this->lang['bar'];
                  }

                }

                //PHP4
                class foo {
                  var 
                $lang;

                  function 
                foo($lang){
                    
                $this->lang $lang;
                  }

                  function 
                bar(){
                    echo 
                $this->lang['bar'];
                  }



                EDIT:
                Sorry, flüchtigkeitsfehler - danke mrhappiness
                Zuletzt geändert von prego; 28.03.2006, 10:38.

                Kommentar


                • #9
                  Wenn du jetzt noch $lang['bar'] durch $this->lang['bar'] ersetzt, ist alles in Ordnung...
                  Ich denke, also bin ich. - Einige sind trotzdem...

                  Kommentar


                  • #10
                    natürlich

                    Kommentar


                    • #11
                      nun auszugsweise siehts dann so aus bei mir:
                      PHP-Code:
                      error_reporting (E_ALL);

                      ini_set("display_errors"TRUE);

                      class 
                      functions {
                          var 
                      $lang;

                          function 
                      functions($lang)
                              {
                              
                      $this->lang $lang;
                              }

                          function 
                      getMainCat($cat)
                              {
                              
                      $db1 = new dbconn(hostuserpassname);

                              if (empty(
                      $cat)) {
                                  return 
                      $this->lang["leftcontent"]["navigation"];
                              } else {
                                  
                      $sql "select * from " tbl_catalog " where cat_id='$cat'";
                                  
                      $result $db1->query($sql);

                                  while (
                      $data mysql_fetch_assoc($result))
                                      if (
                      $data["cat_parent_id"]) {
                                          return 
                      $this->getMainCat($data["cat_parent_id"]);
                                      } else {
                                          return 
                      $data["cat_description"];
                                      }
                              }
                              }
                      }

                      ;
                      /* Instanz der Klasse wird gebildet*/
                      $functs = new functions($lang); 
                      leider kommts zur fehlermeldung:
                      otice: Undefined variable: lang in D:\...\src\db_functions.php on line 1543
                      dies ist letzte Zeile
                      Manchmal verliert ma eben ... und manchmal gewinnen die Anderen

                      Kommentar


                      • #12
                        nimm alles zurück!

                        funktioniert einwandfrei!

                        D-A-N-K-E
                        Manchmal verliert ma eben ... und manchmal gewinnen die Anderen

                        Kommentar

                        Lädt...
                        X