theSnowOne: Variablen inerhalb und außerhalb von Funktionen

Hallo an alle Forumer und Forumerinnen!

Ich wünsche Euch einen wunderschönen Guten Morgen!

Gibt es noch eine andere Möglichkeit auf Variablen außerhalb einer Funktion innerhalb einer Funktion anzusprechen als diese beim aufruf mit zu übergeben!?!??!??!

Na wenn man das verstehen soll?!?!? ;o)

Nochmal:

$test = "Hallo";
funktion gib_was_aus($test)
  {
  echo $test." ;o)";     // Gibt 'Hallo ;o)' aus
  }
So will ich das aber nicht.....

$test = "Hallo";
funktion gib_was_aus()
  {
  echo $test." ;o)";     // Gibt ';o)' aus ;o(
  }
So geht das nicht....

Gibt es dafür noch eine andere Lösung?

Sorry für so ne dähmliche Frage, aber ich hab daruber was gesucht aber nix gefunden....

T H X !

MfG

TheSnow

  1. Hi snow

    Du kannst eine Variable für ein Funktion "sichtbar" machen indem Du sie auf global setzt.

    $meine_variable="HAllo";

    function hello()
    {
       global $meine_variable;
       echo $meine_variable;
    }

    bye lulu

    1. Hi snow

      Du kannst eine Variable für ein Funktion "sichtbar" machen indem Du sie auf global setzt.

      $meine_variable="HAllo";

      function hello()
      {
         global $meine_variable;
         echo $meine_variable;
      }

      bye lulu

      Thx!

      theSnow

  2. Hallo!

    $test = "Hallo";
    funktion gib_was_aus()
      {
      echo $test." ;o)";     // Gibt ';o)' aus ;o(
      }
    So geht das nicht....

    So mußt Du test innerhalb der Funktion bekannt machen.
    http://www.php.net/manual/de/language.variables.scope.php

    MfG, André Laugks

    1. So mußt Du test innerhalb der Funktion bekannt machen.
      http://www.php.net/manual/de/language.variables.scope.php

      Thx!

    2. Grüssi

      Ich hätte da auch ne Frage zu Scoping:

      $test = "Hallo";
      funktion gib_was_aus()
        {
        echo $test." ;o)";     // Gibt ';o)' aus ;o(
        }
      So geht das nicht....

      So mußt Du test innerhalb der Funktion bekannt machen.
      http://www.php.net/manual/de/language.variables.scope.php

      Ich hab da ein ähnliches Problem, wollte zwar keinen eigenen Thread aufmachen, nun ist die Verlockung aber gross, mich hier thematisch einfach anzuhängen:

      class Menu {

      var $MenuID;
         var $expand_all;
         var $file;

      function Menu() { [...] }

      function ParseMenu () {

      // trifft expat auf ein sich öffnendes Tag wird diese Fkt. aufgerufen
            function startTag($parser, $name, $attrs) {
               echo $this->MenuID;
            }

      // trifft er auf ein schliessendes Tag, dann diese Fkt.
            function endTag($parser, $name) { [...] }

      $xp   = xml_parser_create();

      // Hier werden die beiden Funktionen mit Expat verknüpft
            xml_set_element_handler($xp, "startTag", "endTag");

      [...]

      }
      }

      $m = new Menu;
      $m->ParseMenu();

      Ich kann in der inneren Funktion (startTag) nicht auf die Instanzvariable $MenuID zugreifen! In der äusseren (ParseMenu) allerdings schon! Die Verschachtelung muss aus unerfindlichen Gründen sein, da expat sonst die Handlerfunktionen ("startTag" und "endTag") nicht als solche erkennt, wenn ich sie als normale Methoden definiere. auch kann ich an die inneren (Handler-)Funktionen keine zusaätzlichen Parameter übergeben, es handelt sich um von PHP zur Verfügung gestellte Interfaces.

      Bin schon kurz vorm aufgeben, ergo umschreiben des gesamten Konzepts. Wäre also echt dankbar für Anregungen!

      lg bernhard

      1. Hallo!

        class Menu {

        var $MenuID;
           var $expand_all;
           var $file;

        function ParseMenu () {

        // trifft expat auf ein sich öffnendes Tag wird diese Fkt. aufgerufen
              function startTag($parser, $name, $attrs) {
                 echo $this->MenuID;
              }

        Klassen würde ich nicht zu meinem Spezialgebiet zählen. Innerhalb einer Klasse benötigt man doch kein global.

        IMHO, vielleicht mußt Du die Variable in die übergeordnete Funktion holen. Hast Du mal versucht global anzuwenden.

        var $MenuID;
        var $expand_all;
        var $file;
        var $innerMenuID

        function ParseMenu () {

        $this->innerMenuID = $this->MenuID;

        function startTag($parser, $name, $attrs) {
          echo $this->innerMenuID;
        }

        Oliver Lehmann ist glaube Klassenspezialist. Vielleicht kannst Du den ja mal freundlich anschreiben :-).

        MfG, André Laugks

        1. Grüssi Andre,

          IMHO, vielleicht mußt Du die Variable in die übergeordnete Funktion holen. Hast Du mal versucht global anzuwenden.

          Ich habs auch schon so probiert:

          function ParseMenu () {
            $mid = $this->MenuID;
            function startTag($parser, $name, $attrs) {
               global $mid;
               echo $mid;
            }
          }

          klappt auch nicht :-( Was gehen würde, wäre $mid *wirklich* global zu machen, also ausserhalb der Klasse zu stellen, aber das würde imho den ganzen Zweck einer Klassenkonstruktion untergraben!

          Gibts vielleicht irgendein keyword, mit dem man eine Variable nach unten hin (scopemässig) freigeben kann?

          Oliver Lehmann ist glaube Klassenspezialist. Vielleicht kannst Du den ja mal freundlich anschreiben :-).

          hmmm, diese Option werde ich mir offenlassen ;-) Aber erstmal abwarten, vielleicht liest er ja eh mit!

          danke,
          bernhard