Variablen aus function "global" verwenden?

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

  • Variablen aus function "global" verwenden?

    Hi,
    ´
    wenn man in einer function z.B. die Variable $titel definiert und diese funktion dann auf einer html Seite mittels <? functioname(); ?> einbindet. Ist es möglich diese Variable an diversen anderen Stellen dieser Seite zu verwenden?

    Habs versucht, scheint nicht zu klappen - doch vieleicht muss man die Variablen irgendwie speziell difinieren?
    [SIZE=1]Projekte:
    wartower.de | planetd2.de

  • #2
    Du musst die Variable ausserhalb der Funktion definieren und dann in der Funktion diese mittels global verfügbar machen. Dann kannst du sie in der Funktion verändern.

    PHP-Code:
    $title NULL;

    function 
    setTitle() {
      global 
    $title;

      
    $title 'Trallala';

    }

    echo 
    $title;

    setTitle();

    echo 
    $title
    Ich denke, also bin ich.
    Manche sind trotzdem!

    Kommentar


    • #3
      Original geschrieben von cst
      Du musst die Variable ausserhalb der Funktion definieren
      ja.

      und dann in der Funktion diese mittels global verfügbar machen.
      pfui bah. variablen übergeben wir doch ordentlich als parameter an unsere funktionen, anstatt einfach mit globalem kram um uns zu schmeissen ...

      Dann kannst du sie in der Funktion verändern.
      wenn wir das wollen, arbeiten wir entweder mit einer funktion mit returnwert, den wir der variable im hauptscript dann einfach wieder zuweisen - oder wir übergeben die variable als referenz an die funktion.
      I don't believe in rebirth. Actually, I never did in my whole lives.

      Kommentar


      • #4
        Tja,
        ich kann dir nur zustimmen. Aber er Perpetuum hat gefragt wie das geht und nicht wie man das richtig macht und ob es so sinnvoll ist.

        Dies ganze Besserwisserei hier geht mir reichlich auf den Puffer! Viele Antworten sind gar keine, sondern lassen immer nur raushängen wie toll der Antworter doch ist. Eine konkrete Frage kann man doch auch halbswegs konkret mit ein paar Zeilen Code beantworten, oder?!

        Grundsätzlich hast du natürlich recht. Vielleicht sollte man immer die Frage beantworten, wenn´s nicht völlig am Ziel vorbeigeht, und anschließend bessere Lösungswege aufzeigen.

        Naja, nix für Ungut.
        Ich denke, also bin ich.
        Manche sind trotzdem!

        Kommentar


        • #5
          Original geschrieben von cst
          Grundsätzlich hast du natürlich recht. Vielleicht sollte man immer die Frage beantworten, wenn´s nicht völlig am Ziel vorbeigeht, und anschließend bessere Lösungswege aufzeigen.
          ist doch auch passiert, oder?

          wo siehst du da "besserwisserei"?

          oder hängst du dich jetzt an dem "pfui bah" auf ...?
          I don't believe in rebirth. Actually, I never did in my whole lives.

          Kommentar


          • #6
            Original geschrieben von wahsaga
            ist doch auch passiert, oder?

            wo siehst du da "besserwisserei"?

            oder hängst du dich jetzt an dem "pfui bah" auf ...?
            Sorry,
            ich habe gerade ein paar andere Threads gelesen und war reichlich angepestet. Das hast jetzt leider du abbekommen - tschuldigung!
            Ich denke, also bin ich.
            Manche sind trotzdem!

            Kommentar


            • #7
              Also wenn ich das nach dem obigen Beispiel mache klappt das einfach nicht:


              Warning: Missing argument 1 for pic_view() in /var/www/de/wartower/web/edgal/inc/functions.php on line 316


              Kommt immer dieser Fehler...
              functions
              PHP-Code:

              function pic_view(){
                              
              $titel NULL;
                  global 
              $serverpfad;
                  global 
              $bildordner;
                  global 
              $url;
                  global 
              $titel;

                              
              $kategorie str_replace("_"" "$_GET['kat']);
                  
              $titel "Gallerie/$kategorie - $data[2]"

              ausgabe
              PHP-Code:

              <? 
              require("inc/config.php");
              require("inc/functions.php"); 
              ?>
              <html>
              <head>
              <title><? echo $titel; ?></title>
              <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
              <script language="JavaScript" src="inc/overlib.js"></script>
              </head>

              <body bgcolor="#000000" leftmargin="0" topmargin="0" marginwidth="0" marginheight="0">
              <? pic_view(); ?>
              </body>
              </html>


              [SIZE=1]Projekte:
              wartower.de | planetd2.de

              Kommentar


              • #8
                Original geschrieben von Perpetuum
                Warning: Missing argument 1 for pic_view() in /var/www/de/wartower/web/edgal/inc/functions.php on line 316

                PHP-Code:
                function pic_view(){...} 
                bist du sicher, dass der code noch aktueller stand ist?

                laut meldung verlangt deine funktion (mind.) einen parameter, bekommt aber beim aufruf keinen ...
                I don't believe in rebirth. Actually, I never did in my whole lives.

                Kommentar


                • #9
                  So sollte es gehen. Die Variable muss ausserhalb der funktion definiert werden.

                  PHP-Code:
                  $titel NULL;

                  function 
                  pic_view(){
                      global 
                  $serverpfad;
                      global 
                  $bildordner;
                      global 
                  $url;
                      global 
                  $titel;

                                  
                  $kategorie str_replace("_"" "$_GET['kat']);
                      
                  $titel "Gallerie/$kategorie - $data[2]"
                  Die Fehlermeldung bezieht sich aber was anderes. Die Funktion erwartet laut Fehlermeldung einen Parameter. In deinem Code steht davon aber nix. Hier passt was nicht zusammen.
                  Zuletzt geändert von cst; 12.08.2004, 12:46.
                  Ich denke, also bin ich.
                  Manche sind trotzdem!

                  Kommentar


                  • #10
                    Komsich funktioniert einfach nicht. Habe das jetzt so gemacht:

                    Ausgabe:
                    PHP-Code:
                    <?
                    require("inc/config.php");
                    require("inc/functions.php"); 
                    ?>
                    <html>
                    <head>
                    <title><? echo $titel; ?></title>
                    <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
                    <script language="JavaScript" src="inc/overlib.js"></script>
                    </head>

                    <body bgcolor="#000000" leftmargin="0" topmargin="0" marginwidth="0" marginheight="0">
                    <? pic_view(); ?>
                    </body>
                    </html>
                    functions.php
                    PHP-Code:
                     /*****************************************************
                      ** Bild ansehen
                      *****************************************************/
                    $titel NULL;
                    function 
                    pic_view(){
                        global 
                    $serverpfad;
                        global 
                    $bildordner;
                        global 
                    $url;
                        global 
                    $titel;

                        
                        
                    $kategorie str_replace("_"" "$_GET['kat']);
                        
                    $titel "Gallerie/$kategorie - $data[2]";
                        }
                    ?> 
                    Wird einafch kein Titel angezeigt...

                    PS: Der Fehler zuvor kamm davon, dass ich functioname ($titel) angegeben habe. Das hat auch nicht funktoniert. Ich versteh das irgendwie nicht.
                    [SIZE=1]Projekte:
                    wartower.de | planetd2.de

                    Kommentar


                    • #11
                      Original geschrieben von Perpetuum
                      Komsich funktioniert einfach nicht.
                      natürlich nicht!

                      denkst du auch ab und zu mal logisch darüber nach, was du da eigentlich tust ...?


                      require("inc/functions.php");

                      gut, die functions.php ist jetzt eingebunden.
                      welchen wert hat $titel dort? genau, NULL.


                      <head>
                      <title><? echo $titel; ?></title>

                      hier willst du $titel ausgeben. welchen wert hat es? -> s.o.


                      <body bgcolor="#000000" leftmargin="0" topmargin="0" marginwidth="0" marginheight="0">
                      <? pic_view(); ?>

                      erst hier rufst du jetzt deine funktion auf, die den wert von $titel verändert.
                      dürfte aber bisschen spät sein, um noch einfluss auf die oben bereits erfolgte ausgabe zu haben, meinst du nicht?
                      I don't believe in rebirth. Actually, I never did in my whole lives.

                      Kommentar


                      • #12
                        Naja, du musst die Funktion aufrufen, bevor du <title><? echo $titel; ?></title> ausgibst.
                        Bei deiner Programmierung ist die Variable $titel zum Zeitpunkt dieser Ausgabe ja noch gar nicht von der Funktion gefüllt worden. Bevor du also den Seitentitel ausgibst, muss die Variable schon gesetzt sein (deine Funktion ausgeführt worden sein).

                        Es ist grundsätzlich sinnvoll zunächst die Werte der dynamischen Inhalte zu ermitteln und erst dann mit der Ausgabe zu beginnen. In einigen Schleifen ist das zwar problematisch und nicht angeraten, sollte aber tunlichst die Ausnahme sein. Auf diese Weise ist später auch eine Trennung von Layout und Code einfacher möglich (templates etc.).
                        Ich denke, also bin ich.
                        Manche sind trotzdem!

                        Kommentar


                        • #13
                          Genau das ist ja mein Probelm. Die Funktion gibt auch gleich verschiedene Sache aus, die nur hinter dem <body> Tag stehen können.

                          Kann man das überhaupt irgendwie über die Funktion dann machen? Oder am besten gleich über due URL oben übergeben?
                          [SIZE=1]Projekte:
                          wartower.de | planetd2.de

                          Kommentar


                          • #14
                            Original geschrieben von Perpetuum
                            Genau das ist ja mein Probelm. Die Funktion gibt auch gleich verschiedene Sache aus, die nur hinter dem <body> Tag stehen können.
                            deine hier gepostete funktion gibt gar nichts aus. wieder mal anderen code gepostet, als in wirklichkeit verwendet - wozu ...?

                            Kann man das überhaupt irgendwie über die Funktion dann machen?
                            vor allem solltest du erst mal dafür sorgen, dass deine funktion selber gar nichts ausgibt, sondern höchstens einen rückgabewert liefert - der dann seinerseits an der passenden stelle ausgegeben wird.

                            funktionen, die direkt ausgaben erzeugen, sind unsauberer programmierstil.
                            I don't believe in rebirth. Actually, I never did in my whole lives.

                            Kommentar


                            • #15
                              Recht hat er! Aber... hilft dir das weiter?

                              Du solltest mehrere Funktionen für ihren jeweiligen Zweck erzeugen. Und genau wie Wahsaga schreibt, sollten Sie Rückgabewerte liefern.
                              In Deinem Fall könntest du z.B. die Funktion pageTitle() schreiben, die dann nur die Sache mit dem Seitentitel macht.

                              PHP-Code:
                              function pageTitle($kategorie) {
                                  return 
                              'Gallerie/'.str_replace("_"" "$kategorie);

                              Aufruf...
                              PHP-Code:
                              <?
                              require("inc/config.php");
                              require("inc/functions.php"); 
                              ?>
                              <html>
                              <head>
                              <title><? echo pageTitle($_GET['kat']); ?></title>
                              ...
                              Ich denke, also bin ich.
                              Manche sind trotzdem!

                              Kommentar

                              Lädt...
                              X