kostenloser Webspace werbefrei: lima-city


globale und superglobale Variablen

lima-cityForumProgrammiersprachenPHP, MySQL & .htaccess

  1. Autor dieses Themas

    g****e

    soo, ich hab nen kleines dummes problem, das so dumm ist dass ich keine lösung habe die wirklich passt.

    also:
    globale variablen kann ich definieren indem ich nen global davorschreibe.
    das ergibt die ausgabe "toll":
    <?php
    function schreib() {
         global $test; $test = 'toll';
    }
    schreib();
    echo $test;
     ?>


    das finde ich auch super, aber mein ziel ist ein anderes.

    dashier gibt keine ausgaben:
    <?php
    global $test; $test = 'toll';
    function schreib() {
         echo $test;
    }
    schreib();
     ?>


    so, das ganze bisher ist ja erst einführung und alles logisch.

    mein problem welches sich ergab wo ich nu am schlauch stehe (ich hab nen halbes jahr nichts gemacht in dem bereich wegen abi vorbereitungen und so) ist mir zwar peinlich, aber leider gegeben:

    ich sammel in einer solchen variable, am besten in einem Superglobalen array , daten und ganze texte. so, da in dem array $GLOBALS zu viel rumschwirrt bin ich auf der suche nach einem selbst definiertem, dass ich bestimme und füllen kann.
    außerdem ergab sich das problem (welches ich noch nicht ganz durchblickt habe) dass in dem kranken code den ich irgendwie verfasst habe, ein objekt (die datenbank) in $db speichere. problem ist, dass in anderen klassen, wo ich auf diese zugreifen will, diese variable nicht zur verfügung habe (also das objekt, die datenbank). ich will jetzt ja keine 20mal eine datenbankverbindung aufbauen.

    also ich hoffe da ist jemand durchgestiegen, ich bin im mom irgendwie ratlos. muss erstmal wieder richtig reinkommen, aber das kann dauern :-D

    danke für die hilfe :)
  2. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage

  3. global und $GLOBALS sollte man sich allgemein abgewöhnen ;)

    Viel eher solltest du der Funktion schreib() $test als Argument übergeben.

    Was die $db angeht: Auch hier kannst du entweder die $db im __construct der jeweiligen übergibst und in $this->db speichern oder alternativ das Singleton Design Pattern benutzen (dazu findest du was im Inet)
  4. Versuch es doch mit
    echo $GLOBALS['test'];
  5. Autor dieses Themas

    g****e

    das bedeutet also, dass ich jede klasse die ich in anderen klassen brauche (auf jedenfall die datenbank) in einem singleton-pattern machen kann, und in jedem konstruktor der klasse wo ich diese extraklasse brauche "neu erstelle", bzw, neu erstellen versuche, jedoch die erste instanz wieder nutze?
    ganz ehrlich: das ist irgendwie genial. klingt logisch und werd ich nachhern mal ausprobieren :)

    jut, das klappt dann denk ich =)

    ma schauen ob ich den rest auch hingebastelt kriege =)
    ich hab über das GLOBALS array nen template system gebaut, was aber totaler müll ist. es läuft super, die registrierung für neue boxen und so ist super einfach und geht theoretisch. hat aber drastische bugs ... ist auch ne kaqq idee gewesen.

    jetzt ergeben sich 2 fragen noch, die an sich einfach sind, aber ich mir unsicher bin:
    1.
    $this->db->query

    wäre dann die Ansprache für das Objekt in der klasse selbst? oder lieg ich da falsch?

    2.
    ein array in eine funktion zu übergeben ist doch genau so das gleiche, also:
    $array; //beinhaltet viele viele daten im feld. ist eben ein großes array
    function schreibe_array($array) {
        foreach($array as $key => $value) {
            echo $key."=".$value."<br />";
        }
    }


    ich weiß diese funktion ist völliger nonsense, es geht aber darum, ob dann diese hunderten felder alle ausgegeben werden (oder wieviele es sind). oder ob ich arrays nich so einfach an funktionen übergeben kann :-S

    ich weiß das sind nu große noob fragen, aber wo ich schonmal hier schreibe will ich mich gleich nochmal versichern.
    danke schonmal im vorraus!

    PS: das array nehm ich komplett auseinander, hau das in ein neues differenziertes variablenfeld, und dann hau ich es in ein template rein. da das mehrere zeilen sind will ich das auslagern und nicht ständig neu schreiben, denn es muss in mehreren hinsichten flexibel sein, und da ist das ganze mit copy-paste nicht das wahre.
    ich hoffe ihr versteht das :-S
  6. Wieso sollte man keine Arrays an Funktionen übergeben können? Das würde keinen Sinn machen, also: Ja, das funktioniert. Probiere es doch einfach aus. Nur die Zeile "$array;" macht wenig Sinn. Wie währe es mit
    $array = array();
    $array[] = 'Hi';
    $array[] = 'Hallo';
    $array['bemerkung'] = 'Man könnte diese Texte auch gleich in die Klammern des Arrays schreiben, darauf habe ich aber keinen Boch :P';
    schreibe_array($array);
  7. ggamee schrieb:
    das bedeutet also, dass ich jede klasse die ich in anderen klassen brauche (auf jedenfall die datenbank) in einem singleton-pattern machen kann, und in jedem konstruktor der klasse wo ich diese extraklasse brauche "neu erstelle", bzw, neu erstellen versuche, jedoch die erste instanz wieder nutze?
    ganz ehrlich: das ist irgendwie genial. klingt logisch und werd ich nachhern mal ausprobieren :)

    korrekt.

    1.
    $this->db->query

    wäre dann die Ansprache für das Objekt in der klasse selbst? oder lieg ich da falsch?

    Wenn du es im Konstruktor in $this->db schreibst und PDO benutzt: JA :)

    2.
    ein array in eine funktion zu übergeben ist doch genau so das gleiche, also:
    $array; //beinhaltet viele viele daten im feld. ist eben ein großes array
    function schreibe_array($array) {
        foreach($array as $key => $value) {
            echo $key."=".$value."<br />";
        }
    }


    ich weiß diese funktion ist völliger nonsense, es geht aber darum, ob dann diese hunderten felder alle ausgegeben werden (oder wieviele es sind). oder ob ich arrays nich so einfach an funktionen übergeben kann :-S

    Klar kannst du ;)
  8. Autor dieses Themas

    g****e

    super =)
    schnelle und gute antworten! ich liebe dieses forum^^

    ich denke mal das waren meine problemas, jetzt kann ich mich heute abend mal hinsetzen und den ganzen kram neu schreiben, aber diesmal dann so wie er auch funktionieren sollte, und dass in jedem fall (der erste versuch hatte ja spakungen xD)

    vielen dank =)
  9. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage

Dir gefällt dieses Thema?

Über lima-city

Login zum Webhosting ohne Werbung!