Ankündigung

Einklappen
Keine Ankündigung bisher.

Vergleich zweier Variablen funktioniert nicht?

Einklappen

Neue Werbung 2019

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

  • Vergleich zweier Variablen funktioniert nicht?

    Hallo,

    Ich dreh hier gerade durch

    PHP-Code:

    $prio 
    1;

    function 
    __getHeadImage($ind) {
                         
                if (
    $prio == $ind)
                return 
    'p_p'.$ind.'_a.gif';
                else 
                return 
    'p_p'.$ind.'_n.gif';
                
                
    //return "p_p".$ind."_".( ($ind == $prio) ? "a" : "n").".gif";
        
        

    Anhand der Werte nach p_p kann ich nachvollziehen, dass $ind immer den korrekten Wert hat.

    Durch das setzen von $prio stelle ich sicher, dass $prio den Wert 1 hat (zum testen).

    Wenn ich __getHeaderImage(1) aufrufe wird wie erwartet p_p1_a.gif zurückgegeben.

    Rufe ich die Funktion jedoch so auf:

    PHP-Code:
    $i 1;
    while (
    $i<4) {
        echo 
    __getHeaderImage($i);
        
    $i++;

    Bekomme ich folgende Ausgabe:

    p_p1_n.gif
    p_p2_n.gif
    p_p3_n.gif

    An dem p1, p2, p3 sieht man ja dass die Funktion definitiv mit den richtigen Argumenten aufgerufen wird! Nur erkennt PHP nicht mehr dass $ind == $prio ist !


    Der Quellcode ist auf relevante Teile gekürzt. ICh versichere euch aber, dass ich nirgendwo ausversehen $prio umsetze oder ähnliches.


  • #2
    Aber dass Du $prio außerhalb der Funktion setzt und innerhalb der Funktion verwenden willst, ist "richtig" verkürzt?
    Dann interessiert Dich sicherlich PHP: Variable scope - Manual

    Kommentar


    • #3
      Ja, war richtig verkürzt und damit auch der Fehler.

      Ich kenne keine Sprache in der man globale Variablen in einer Funktion erst einführen muss. Deshalb die unverständniss. Mir entzieht sich da momentan auch noch vollkommen der Sinn dahinter, aber irgendeinen Grund wirds wohl geben..

      Wie auch immer, Danke!

      Kommentar


      • #4
        Leider doch noch nicht gelöst...:

        Ich übergebe die Variable prio über die Adresse, also

        todo.php?prio=1 oder 2 oder 3 usw.

        Auf meinem Rechner funktioniert jetzt alles. Jetzt habe ich das skript ins Internet auf meinen Server hochgeladen und es funktioniert _nicht_.

        Gibt es irgendeine Einstellung oder sowas die das Übergeben von Variablen über die Adresszeile verbietet ?

        Kommentar


        • #5
          -> Lerne Grundlagen. Stichwörter sind register_globals und der Gültigkeitsbereich, wie von David angesprochen.
          Viele Grüße,
          Dr.E.

          ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
          1. Think about software design before you start to write code!
          2. Discuss and review it together with experts!
          3. Choose good tools (-> Adventure PHP Framework (APF))!
          4. Write clean and reusable software only!
          ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

          Kommentar


          • #6
            "register_globals"
            edit: naja da war wohl jmd schneller..

            Kommentar


            • #7
              Zitat von Stephan_87 Beitrag anzeigen
              Ja, war richtig verkürzt und damit auch der Fehler.

              Ich kenne keine Sprache in der man globale Variablen in einer Funktion erst einführen muss. Deshalb die unverständniss. Mir entzieht sich da momentan auch noch vollkommen der Sinn dahinter, aber irgendeinen Grund wirds wohl geben..

              Wie auch immer, Danke!
              Dann hast du aber sicher keine Objekt-Orientierten Sprachen programmiert.
              Das Konzept von OOP ist nämlich die Datenkapselung, und genauso ist es bei PHP in funktionen und seit PHP5 auch in Klassen.
              Programmier z.B. mal Cocoa, da kannst du prinzipiell weder auf Eigenschaften von Objekten zugreifen noch diese schreiben. Das geht nur über Setter und Getter - Datenkapselung eben.

              mfg

              Kommentar


              • #8
                Ähm BlackWolf, Stephan_87 hat da schon recht.
                Dass man globale Variabeln erst über "global" in den Funktions-Scope holen muss, ist wirklich eine PHP Eigenart.
                Das was du beschreibst, ist wieder was ganz anderes....
                Create your own quiz show.

                Kommentar


                • #9
                  Okay danke euch...

                  Ihr habt schon recht mit dem Grundlagen lernen. Aber ich lerne prinzipiell am besten durch "learning while doing".

                  Und um mich etwas zu verteidigen: Mich nervt diese Inkonsistenz. Ich habe den Apache hier auf meinem Rechner laufen, da macht das Script exakt das was es soll. Ich lade es ins Internet hoch und da brauch ich dann plötzlich dieses register_globals - auf dem lokalen Server reichte aber anscheinend das Einführen durch global innerhalb der Funktion.

                  Sofern ich nicht etwas überlesen habe steht diesbzgl. auch nichts auf der von David verlinkten Seite.

                  Aber ich google jetzt mal danach was es mit register_globals auf sich hat.

                  Danke nochmal.

                  edit: Okay, jetzt ist alles klar. Auf dem localhost ist register_globals=on gesetzt, auf dem im Web nicht.

                  Kommentar


                  • #10
                    Zitat von Stephan_87 Beitrag anzeigen
                    Sofern ich nicht etwas überlesen habe steht diesbzgl. auch nichts auf der von David verlinkten Seite.
                    [man]global[/man] hat auch erstmal nichts mit register_globals zu tun.
                    siehe PHP: Using Register Globals - Manual

                    Kommentar


                    • #11
                      Zitat von agrajag Beitrag anzeigen
                      Ähm BlackWolf, Stephan_87 hat da schon recht.
                      Dass man globale Variabeln erst über "global" in den Funktions-Scope holen muss, ist wirklich eine PHP Eigenart.
                      Das was du beschreibst, ist wieder was ganz anderes....
                      Nicht wirklich.
                      "global" in der Funktion mag eine Eigenart sein, was aber einfach daran liegt das man in anderen Sprachen direkt variablen als global definieren kann wenn man sie zum ersten mal definiert.
                      An der Datenkapselungsgeschichte ändert das nichts. Was ich aus cocoa beschreibe hat nichts mit global zu tun, zeigt aber das es noch Sprachen gibt die sich wesentlich strenger an die Datenkapselung halten als PHP (eigentlich ist PHP da sogar ziemlich lasch) ^^

                      mfg

                      Kommentar


                      • #12
                        Zitat von BlackWolf Beitrag anzeigen
                        Nicht wirklich.
                        "global" in der Funktion mag eine Eigenart sein,
                        Und genau darum ging es ja.
                        was aber einfach daran liegt das man in anderen Sprachen direkt variablen als global definieren kann wenn man sie zum ersten mal definiert.
                        Variabeln die ich globalen Scope definiere kann ich eben (in den meisten Sprachen) überall verwenden. Dazu muss ich sie nicht extra "als global" definieren.

                        An der Datenkapselungsgeschichte ändert das nichts. Was ich aus cocoa beschreibe hat nichts mit global zu tun, zeigt aber das es noch Sprachen gibt die sich wesentlich strenger an die Datenkapselung halten als PHP (eigentlich ist PHP da sogar ziemlich lasch)
                        Dann sind wir uns ja einig, dass es nichts mit "global" und globalen Variablen zu tun hat - und damit nichts mit dem Problem des OPs.
                        Create your own quiz show.

                        Kommentar


                        • #13
                          Ich vermeide die Verwendung von globalen Variablen. Globale Variablen erschweren die Fehlersuche. Die Kommunikation der einzelnen Module läuft über klar definierte Schnittstellen.

                          Kommentar

                          Lädt...
                          X