include innerhalb von funktionen

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

  • include innerhalb von funktionen

    Hmmm... include liest eine Datei aus, und bindet den beinhaltenden php-code so ein, als ob er dort geschrieben wurde, wo include aufgerufen wurde. Warum geht folgendes nicht, und wie schaffe ich es, dass es funktioniert (das Prinzip dass eine datei in einer funktion ausgelsen, und als funktionskörper benutzt wird):

    Datei A.php:
    Code:
    <?PHP
    return "HARLO!";
    ?>
    Datei B.php
    Code:
    <?PHP
    function foo()
    {
      include("A.php");
    }
    
    echo foo();
    ?>

  • #2
    weil "return "hallo""; auserhalb einer funktion nicht gültig ist...

    mach mal:

    datei a:
    <?php
    $var = "hallo";
    ?>

    function foo()
    {
    include("a.php");
    echo $var;
    }

    das sollte gehen

    gruss

    Kommentar


    • #3
      sinn?

      warum nicht gleich die ganze funktion in datei a.php?


      inlcude liefert normalerweise einen wert zurück, der besagt, ob das einbinden erfolgreich war oder nicht, durch das return, das du hast, gibt dir include einen string zurück, den du innerhalb der funktion mit return zurückgeben musst


      aber im manual steht das doch auch drin, hast du da etwa nicht geschaut?
      Ich denke, also bin ich. - Einige sind trotzdem...

      Kommentar


      • #4
        Ah, Danke.

        @mrhappiness: Denk bitte nciht ich sei dumm, aber ich versteh den Teil nicht:
        > durch das return, das du hast, gibt dir include einen string zurück, den du innerhalb der funktion mit return zurückgeben musst.
        Zuletzt geändert von Luke; 31.01.2004, 15:04.

        Kommentar


        • #5
          Ach ja: >warum nicht gleich die ganze funktion in datei a.php?

          Ich wollte dir nicht mein ganzes Template-System erklären. Ich hab das Problem abstrahiert und gepostet. Ich muss eine Zentrale funktion mit einem eindeutigen namen haben, die ihren parametern entsprechend eine datei einbindet, und dessen PHPcode bearbeitet und zurückgibt.

          Kommentar


          • #6
            http://www.php.net/eval ?
            Ich denke, also bin ich. - Einige sind trotzdem...

            Kommentar


            • #7
              Ok, dann eben die ganze chose:
              Mein Templte funktioniert so, dass sich meine Seite _komplett_ umgestalten lässt. Dafür läd er ein Layoutfile, dass das ganze HTML beinhaltet, und an den entsprechenden Stellen besondere Tags wie " [Wikielement: "login_menu"] " gessetzt werden können, die dann durch den entsprechenden Code ersetz werden. Das funktioniert über RegEx. Hier ein Beispiel (du musst dir keinen Kopf über das RegEx machen, beachte nur den /e parameter, der das gefundene an eine Funktion übergibt, dessen Rückgabewert den Replacementstring bildet):
              Code:
              $out = preg_replace("/\[Wikielement: \"([^\"]*)\"\]/ie", "get_wikielement('\\1')", $out);
              Die Wikielemente sollen aber auch nicht starr, sondern von dem der das Wikisystem einsetzt, einfach zu erweitern sein. Dafür habe ich einen ordner 'elements' in dem eine Name.inc ein Wikielement representiert. in der Funktion get_wikielement($name) (s.o.) soll er also im Ordner elements die entsprechende Datei öffnen, und den sich darin befindenden PHP-Code bearbeiten, und das fertige HTML als return-wert der Funktion (get_wikielement) zurückgeben.

              Mein erster Ansatz war einfach den Funktionskörper in die auszulesende Datei zu schreiben, aber das ging nicht (s.o. im Thread). Das mit der Variable ist ne ganze gute Lösung für mich. Wenn du eine bessere hast, immer raus damit

              Kommentar


              • #8
                Die Wikielemente sollen aber auch nicht starr, sondern von dem der das Wikisystem einsetzt, einfach zu erweitern sein. Dafür habe ich einen ordner 'elements' in dem eine Name.inc ein Wikielement representiert. in der Funktion get_wikielement($name) (s.o.) soll er also im Ordner elements die entsprechende Datei öffnen, und den sich darin befindenden PHP-Code bearbeiten, und das fertige HTML als return-wert der Funktion (get_wikielement) zurückgeben.
                OffTopic:

                exakt die selbe funktionalität hab ich vor ca. 1-2 wochen auch programmiert, aber genau das selbe ... lustig, ok, dann nicht.
                da ließ sich auch super gut mit arbeiten, habs dann aber verworfen und ne andere lösung gewählt.



                ich schau mal, ob ich den code finde ... glaubs eher nicht
                Die Zeit hat ihre Kinder längst gefressen

                Kommentar


                • #9
                  OffTopic:
                  Vorher hatte ich das so gemacht dass ich eine zentral Funktion hatte, die den entsprecheden Code beinhaltet (alle Wikielements), aber das lässt sich nicht so einfach erweitern, und gerade da soll die Stäkre meines Wikis liegen.

                  Kommentar


                  • #10
                    Wenn in einer Datei drin steht:
                    PHP-Code:
                    <?php
                        
                    return 'Hallo';
                    ?>
                    Dann gibt include den Wert von return zurück:
                    PHP-Code:
                     $a = include('test.php');
                    echo 
                    $a// sollte jetzt Hallo ausgeben 
                    Genauso kann man das Return in einer Funktion verwenden:
                    PHP-Code:
                    function foo() {
                    return include(
                    'test.php');
                    }
                    echo 
                    foo(); // sollte auch Hallo ausgeben. 

                    Kommentar


                    • #11
                      Geilo das geht ) ! Danke!

                      Kommentar


                      • #12
                        Original geschrieben von Luke
                        Geilo das geht ) ! Danke!
                        Gern geschehen. Als Tipp fürs nächste Mal: Sas steht auch alles im Manual drin (http://de.php.net/manual/de/function.include.php).

                        Kommentar


                        • #13
                          Denk nich ich les mir normalerweise nicht alles genau durch, nur dachte ich diesmal ich würd' include kennen... naja man lernt eben nie aus

                          Kommentar

                          Lädt...
                          X