Ankündigung

Einklappen
Keine Ankündigung bisher.

Variable in allen Klassen verfügbar/änderbar?

Einklappen

Neue Werbung 2019

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

  • Variable in allen Klassen verfügbar/änderbar?

    Hallo,

    habe folgenden Aufbau:

    index.php
    - Klasse a
    - Klasse b
    ...

    Also ne index, die mehrere Klassen anwendet. Jetzt habe ich in der index.php eine Variable $config beispielsweise.

    Diese möchte ich jetzt in der index.php haben und in allen Klassen ebenfalls. Auch möchte ich wenn ich dort ne variable ändere, dass die für alle geändert ist.

    Mein derzeitiger Versuch ist $config = $_GLOBALS['config']; in allen Klassen. Damit sind auch die Daten verfügbar.
    Leider aber wenn ich in Klasse b was ändere, ändert sich das nicht automatisch in Klasse a.

    Gibts dafür noch ne Lösung?

    Danke


  • #2
    Klassenvererbung
    Competence-Center -> Enjoy the Informatrix
    PHProcks!Einsteiger freundliche TutorialsPreComposed Packages

    Kommentar


    • #3
      Ja ich hab ja in der index.php keine Klasse...das ist ne einfache Datei. Habs jetzt auch mal mit

      global $config;

      in der index.php versucht, aber das geht ja leider auch nicht.
      Hat vielleicht noch einer einen Tipp?

      Kommentar


      • #4
        Das hat doch nichts mit Vererbung zu tun, vielleicht zeigst Du mal Code aus der index.php
        Competence-Center -> Enjoy the Informatrix
        PHProcks!Einsteiger freundliche TutorialsPreComposed Packages

        Kommentar


        • #5
          OK das ist meine index.php:

          Code:
          $config[] = ....ein array bestehend aus $config[wert1] =a;$config[wert2] = b;....
          In Klasse a und b habe ich dann so integriert:

          Code:
          $config = $_GLOBALS[config];
          Das Lesen läuft jetzt auch alles. Aber das Schreiben nicht. Denn ein

          Code:
          $config[wert1] = neuerwert;
          ist zwar dann in der Klasse drin, aber nicht global.

          Kommentar


          • #6
            Ich weiß ehrlich gesagt noch nicht ganz, worauf Du hinaus willst, kann aber auch an mir liegen.
            Flogendes zum Verständnis:
            PHP-Code:
            class ErsteKlasse {
              protected 
            $VarErsterKlasse 0;

              public function 
            GetVar() { echo $this->VarErsterKlasse; }
            }

            class 
            ZweiteKlasse extends ErsteKlasse {
              public function 
            AddVar() { $this->VarErsterKlasse++; }
            }

            $OBJ = new ZweiteKlasse;
            $OBJ->GetVar();
            $OBJ->AddVar();
            $OBJ->GetVar(); 
            Competence-Center -> Enjoy the Informatrix
            PHProcks!Einsteiger freundliche TutorialsPreComposed Packages

            Kommentar


            • #7
              Ich glaub wir verstehen uns bisschen falsch^^...aber hab ne Lösung gefunden. Denn ich muss die Änderung einfach globalisieren innerhalb einer Klasse. Sieht dann also so aus:

              PHP-Code:
              $config["wert1"] = "neuerwert";
              $GLOBALS['config'] = $config
              Dann läuft alles korrekt...aber gibts vielleicht noch ne Möglichkeit das direkt zu globalisieren?
              Also sowas?
              PHP-Code:
              $GLOBALS[config["wert1"]] = "neuerwert"
              Denn bei der Variante jetzt meckert er leider mit dem syntax, aber wüsste auch nicht, wie ich das sonst setzen sollte.

              Kommentar


              • #8
                Wie wäre es mit Referenzen?
                PHP: Referenzen in PHP - Manual

                Kommentar


                • #9
                  Oder mit dem Registry-Pattern?
                  Entwurfsmuster: Registry-Pattern - Beitrag - Webdeveloper-Blog - Daniel Stosch

                  [edit]
                  Vielleicht ist es aber auch nur ein Designfehler und du erklärst uns erstmal, wozu du das überhaupt brauchst.
                  http://hallophp.de

                  Kommentar


                  • #10
                    Ich würde das anders lösen.

                    Mache dir eine Klasse und nenne SystemConfigClass.php, so und da erstellst du dir sämtliche Methoden die du bracuhst. Den Methoden übergibst du natürlich die Member Variable.

                    Und dann in jeder Klasse bzw. Methode wo die bracuhst kannst du die entweder im Konstruktor verfügbar machen oder aber du übergibst diese den Methoden wo die sie wirklich nur bracuhst via Type Hint.

                    So würde ich das machen.

                    Kleines Beispiel (ungetestet)

                    PHP-Code:
                    error_reporting(E_ALL E_STRICT);
                    ini_set("display_errors"TRUE);

                    class 
                    SystemConfigClass{
                        
                        private 
                    $_var;
                        private 
                    $_var2;
                        
                        public function 
                    __construct(){}
                        
                        public function 
                    methodVar($wert null){
                            
                            
                    $this->_var $wert;
                            
                            return 
                    $this->_var;
                        }
                        
                        public function 
                    methodvar2($wert null){
                            
                            
                    $this->_var2 $wert;
                            
                            return 
                    $this->_var2;
                        }
                    }

                    //klasse in der die anwendest
                    class SystemKomponent{
                        
                        private 
                    $_member1;
                        private 
                    $_meber2;
                        
                        public function 
                    __construct(){}
                        
                        
                    //via type hint
                        
                    public function editMethodOne(SystemConfigClass $configs){
                            
                            
                    $this->_member1 $configs->methodVar("blub");
                            
                            return 
                    $this->_member1;
                        } 
                    }

                    $conf = new SystemConfigClass();

                    $memb = new SystemKomponent();

                    $membEdit $memb->editMethodOne($conf);

                    echo 
                    $membEdit
                    Aus dem Dynamo Lande kommen wir. Trinken immer reichlich kühles Bier. Und dann sind wir alle voll, die Stimmung ist so toll. Aus dem Dynamo Lande kommen wir.
                    http://www.lit-web.de

                    Kommentar

                    Lädt...
                    X