waldemar: variable in string

Hellö

php 4.3.3 gibt mir einen feinen fehler, wenn ich versuche in einem string eine variable auszugeben, die ein einfaches anführungszeichen enthält. so ist es nicht fehlerlos möglich:

echo " meine variable: $_SESSION['name'] blabla";

sich ausgeben zu lassen. wohl aber folgendes:

$varname = "name";
echo " meine variable: $_SESSION[$varname] blabla";

nur weiss ich nicht, ob das ein bug in der php 4.3.3 ist (in 4.3.1 funktioniert nämlich alles prima), oder ein "feature". ob mir da jemand helfen kann, oder verraten könnte, wo ich hilfe kriegen könnte?

waldemar.

  1. Hallo,

    Strings zwischen " und " werden geparst, zwischen ' und ' nicht, d.h., bei "" entfallen die '' im Array.
    Du kannst also entweder so schreiben wie in Deiner Variante 2 oder
    echo ' meine variable: ' . $_SESSION[$varname] . ' blabla';
    Ich weiss auch nicht genau, seit wann das so ist, aber ich habe auch den Eindruck, das sei relativ neu. Du musst Dich wohl oder uebel durch die change_logs bei http://www.php.net wuehlen.

    Dieter

  2. hi,

    php 4.3.3 gibt mir einen feinen fehler, wenn ich versuche in einem string eine variable auszugeben, die ein einfaches anführungszeichen enthält. so ist es nicht fehlerlos möglich:

    echo " meine variable: $_SESSION['name'] blabla";

    hat der fehler auch einen namen?

    gruss,
    wahsaga

  3. Hallo,

    echo " meine variable: $_SESSION['name'] blabla";

    Warum das in PHP 4.3.3 nicht funktioniert, ist mir raetselhaft.

    Hinweis: Die einfachen Anfuehrungszeichen sind _in_diesem_Fall_
    nicht notwendig. Auch folgendes ist "valide":

    echo " meine variable: $_SESSION[name] blabla";

    Siehe auch:
    Abschnitt "note:" unter
    http://www.php.net/manual/en/language.types.array.php#AEN3791

    Vielleicht hilft Dir auch das weiter:
    http://www.php.net/manual/de/language.types.string.php#language.types.string.parsing

    Gruesse,

    Thomas

    1. Hallo,

      Sorry, Nachtrag.
      Ich sollte mir endlich abgewoehnen, Links auf die deutsche
      Version des Manuals zu posten.

      http://www.php.net/manual/de/language.types.string.php#language.types.string.parsing

      Wieder einmal stand die Antwort naemlich nur in der
      englischen Version:
      http://www.php.net/manual/en/language.types.string.php#language.types.string.parsing.simple

      3 Beispiele, die funktionieren:

      // Works but note that this works differently outside string-quotes
      echo "A banana is $fruits[banana].";

      // Works
      echo "A banana is {$fruits['banana']}.";

      // Works
      echo "A banana is " . $fruits['banana'] . ".";

      1 Beispiel, das nicht funktioniert - entspricht der Syntax
      von waldemar:

      // Won't work, use braces.  This results in a parse error.
      echo "A banana is $fruits['banana'].";

      Gruesse,

      Thomas

      1. Hi,

        vielen dank. mein problem ist nur, dass ich die bisherig funktionierende syntax an sehr, sehr vielen stellen verwendet habe, die ich mich nich so ohne weiteres zu ändern traue. da ich php 4.3.3 bislang nur auf einem testsystem benutze, bin ich mir jetzt nicht sicher, ob es sich lohnt eine stable php5 abzuwarten, die vielleicht die alte syntax wieder so wie die 4.3.1 parst (auch wenn die syntax nicht wirklich korrekt ist, siehe die von dir genannten beispiele) oder ob ich mich nun einfach dranmache, die syntax an allen stellen zu ändern.. in den changelogs habe ich bislang leider nichts aufschlussreiches gefunden.

        gruss,
        waldemar

        1. Hallo,

          »»da ich php 4.3.3 bislang nur auf einem testsystem benutze, bin ich mir jetzt nicht sicher, ob es sich lohnt eine stable php5 abzuwarten, die vielleicht die alte syntax wieder so wie die 4.3.1 parst

          Vertraue nicht darauf. Generell werden sie nicht alte Fehler wieder einbauen, und ganz sicher kann ich dir sagen, dass die PHP5beta2 dieses Fehlverhalten nicht aufweist.

          gruß,
          Severin

          --
          Realität ist das, was nicht verschwindet, wenn man aufhört, daran zu glauben.
          --Philip K. Dick
        2. Hallo,

          [...] bin ich mir jetzt nicht sicher, ob es sich lohnt eine stable php5 abzuwarten, die vielleicht die alte syntax wieder so wie die 4.3.1 parst (auch wenn die syntax nicht wirklich korrekt ist, siehe die von dir genannten beispiele) oder ob ich mich nun einfach dranmache, die syntax an allen stellen zu ändern.. in den changelogs habe ich bislang leider nichts aufschlussreiches gefunden.

          Dass die von Dir verwendete Schreibweise bisher "funktioniert" hat,
          war Glueckssache.
          "Stabil/sicher" (und in guten Lehrbuechern u.s.w. empfohlen)
          waren eigentlich bisher immer nur die Schreibweisen
          a) mit Unterbrechung des Strings:
          echo "A banana is " . $fruits['banana'] . ".";
          b) mit den geschweiften Klammern:
          echo "A banana is {$fruits['banana']}.";
          Seite wann
          echo "A banana is $fruits[banana].";
          funktioniert bzw. valide ist, weiss ich nicht.

          Ich denke, Du musst in den sauren Apfel beissen und
          alle Deine Skripts anpassen.
          Diese Grundlagen der Syntax werden IMHO konstant bleiben.

          Gruesse,

          Thomas

    2. hi,

      echo " meine variable: $_SESSION['name'] blabla";

      Warum das in PHP 4.3.3 nicht funktioniert, ist mir raetselhaft.

      es steht aber auf der seite http://www.php.net/manual/en/language.types.string.php#language.types.string.parsing.simple explizit als _nicht_ funktionierend:

      // Won't work, use braces.  This results in a parse error.
      echo "A banana is $fruits['banana'].";

      gruss,
      wahsaga

      1. Hallo,

        es steht aber auf der seite http://www.php.net/manual/en/language.types.string.php#language.types.string.parsing.simple explizit als _nicht_ funktionierend:

        Hab ich inzwischen auch entdeckt: [pref:t=62343&m=352437]
        ;-)
        Moral: Trau' nie einer Uebersetzung...

        Gruesse,

        Thomas

        1. hi,

          Hab ich inzwischen auch entdeckt: [pref:t=62343&m=352437]

          ja, den post hatte ich nur überflogen, und dabei übersehen, dass du die analogie zum beispiel der frage schon entdeckt hattest.

          gruss,
          wahsaga

    3. Hello,

      Hinweis: Die einfachen Anfuehrungszeichen sind _in_diesem_Fall_
      nicht notwendig. Auch folgendes ist "valide":

      echo " meine variable: $_SESSION[name] blabla";

      Dann probier doch mal $_SESSION[class] ... oder $_SESSION[SID] nachdem eine Session gestartet wurde...

      Grüße

      Tom