PHP – Übergabe einer Funktion an eine Variable

Die Zeiten ändern sich.

Dieser Beitrag scheint älter als 18 Jahre zu sein – eine lange Zeit im Internet. Der Inhalt ist vielleicht veraltet.

Funktionen können ohne weiteres an Variablen übergeben werden, so lassen sich diese auch schnell mit wenig Code wieder aufrufen. Die zwei folgenden Beispiele sollen dies verdeutlichen und mir als Gedächtnisstütze dienen. Im ersten Beispiel wird, ganz simpel, die Funktion „FunkUebergabe“ an die Variabel $myFunc übergeben.
Im zweiten Beispiel übergeben wir die Funktion mit einem Parameter $para, genannt „call by value“.
call by value – Werte werden an eine Funktion per Kopie übergeben. Die Funktion kann somit die ursprüngliche Variable nicht ändern.
Im dritten Beispiel übergeben wir den Parameter mit Referenz, damit ändert sich die Variable außerhalb der Funktion.
call by reference – Werte werden an eine Funktion per Referenz übergeben und nicht kopiert. Die Funktion kann somit die ursprüngliche Variable ändern.

Beispiel 1:


<?php

/**
 * Übergabe einer Funktion an eine Variable
 */

function FunkUebergabe(){
	echo 'Übergabe für eine Test';
}
$myFunc = 'FunkUebergabe';
echo "Folgende Zeile ist der Inhalt der Funktion \"FunkUebergabe\"\n" ;
echo $myFunc();
?>

Beispiel 2:


<?php

/**
 * Übergabe einer Funktion an eine Variable mit Parameter
 */

function FunkUebergabe($para){
	$para++;
	return $para;
}
$para1 = 100;
$myFunc = FunkUebergabe($para1);
echo 'Inhalt der Variable para1'."\n";
echo $para1."\n";
echo 'Folgende Zeile ist der Inhalt der Funktion "FunkUebergabe" mit Parameter'."\n";
echo $myFunc;
?>

Beispiel 3:


<?php

/**
 * Übergabe einer Funktion an eine Variable mit Parameterreferenz
 */

function FunkUebergabe(&$para){
	$para++;
	return $para;
}
$para1 = 100;
$myFunc = FunkUebergabe($para1);
echo 'Inhalt der Variable para1 ändert sich auch'."\n";
echo $para1."\n";
echo 'Folgende Zeile ist der Inhalt der Funktion "FunkUebergabe" mit Parameter'."\n";
echo $myFunc;
?>

Von Frank Bültge

bueltge.de [by:ltge.de] wird von Frank Bültge geführt, administriert und gestaltet. Alle Inhalte sind persönlich von mir ausgewählt und erstellt, nach bestem Gewissen und Können, was die Möglichkeit von Fehlern nicht ausschließt.

18 Kommentare

  1. Hi, wusste noch gar nicht das man bei PHP Funktionen an Variablen übergeben kann. Man lernt nie aus.
    Aber kann es sein, dass bei den letzten beiden Beispielen, jeweils in der letzten Zeile, das Klammernpaar hinter $myFunc fehlt?

    Ciao Flo

  2. nein, die fehlen nicht. Hier wird der Inhalt der Variable myFunc ausgegeben. In dem Fall die Funktion, die vorher an die Variable myfunc übergeben wurde.
    Aber danke der Nachfrage, bin immer wieder für Hinweise dankbar.

    LG Frank

  3. Hi,
    also Beispiel 1 ist mir auch neu, und ich bin fast schon ein alter Hase in PHP.
    Aber Bsp. 2 und 3 sind doch ganz einfache Funktionsaufrufe ? oder ?
    LOL Habe auch erst ein wenig Zeit gebrauch bis ich das gesehen habe (-:

  4. Hi, leider kann man mit Beispiel 1&2 nur solange etwas anfangen, bis man versucht Schleifen zu benutzen. Beispielsweise bei einer While-Schleife, welche mit mysql_fetch_array() mehrere Werte aus einer Datenbank liest und ausliest, gibt die Variable immer nur den ersten Schritt der Schleife aus.
    Vlt sollte man das noch hinzufügen.

    lg

  5. Kann ich diese tolle Funktion von php auch nutzen, wenn ich eine Methode einer anderen Klasse referenziere? Also soetwas:

    class blub {function FunkUebergabe(){return 4;}}

    $x= new blub();
    $myFunc = $x->FunkUebergabe();
    echo $myFunc();

    (Wie) Kann man soetwas realisieren???

  6. Du sollstest das so machen:

    class blub
    {
        function FunkUebergabe()
        {
            return 4;
        }
    }
    
    $x = new blub;
    $myFunc = $x->FunkUebergabe();
    echo $myFunc;

    Funktioniert 100%

  7. Hallo,

    ich weiß nicht ob ich hier genau richtig bin für meine Frage. Ich möchte gerne den Bogen zu WordPress spannen: Ist es möglich einen Query-String durch WordPress zu „schleifen“.

    Ein kleines Beispiel:
    Jemand ruft meine Webseite mit http://www.wordpress-seite.de?id=3 auf. Wie kann ich den ID-Query-String ständig durch alle Seiten / Einträge / Archive mitübergeben? – Solang bis dieser Query-String für mich von Interesse ist.

    Vielleicht ist die eigentliche Frage auch: Wie gehe ich in WordPress mit globalen Variablen um bzw. nütze diese sinnvoll.

    Wie man vielleicht sieht, habe ich ein paar Grundkenntnisse in PHP und WordPress (-Backend), allerdings nicht in letzter Konsequenz. Ich wäre sehr dankbar, wenn ich einen Schritt weiter käme.

    Viele Grüße

  8. Hallo Zusammen,

    das erste Beispiel ist richtig, aber Beispiel zwei und drei haben mit Funktionszeigern überhaupt nichts zu tun. Sind ganz gewöhnliche Funktionsaufrufe. Die Variable speichert den Rückgabewert und gibt ihn dann aus. Das klappt natürlich auch mit der Übergabe per Referenz. Sorry for that! 😉

    Beste Grüße,
    Michael

  9. Hallo Frank,

    ich hoffe mit Deiner Funktion das machen zu können was ich vor habe. Ich möchte die Titel in WordPress bereits nach 25 Buchstaben kürzen und habe dazu in der Template functions.php eine Funktion geschrieben:


    function ShortenText($text)
    {
    // Change to the number of characters you want to display
    $chars = 25; $text = $text." ";
    $text = substr($text,0,$chars);
    $text = substr($text,0,strrpos($text,' '));
    $text = $text."..."; return $text;

    }

    In meinem Loop wollte ich dann the_title() einfach kürzen und ausgeben durch:


    $shorttitle = ShortenText(the_title());
    echo $shorttitle;

    Aber leider funktioniert das nicht. Mit Deiner Variante bekomme ich allerdings zusätzlich noch die Fehlermeldung: "funkuebergabe() previously declared in....."

    Hast Du eine Idee?

  10. Aufpassen, die Funktion the_title sorgt für eine direkte Ausgabe, incl. echo, siehe post-template.php.
    Das Kürzen mittels substr() sollte reichen, allerdings muss die Funktion get_the_title genutzt werden, die aber noch keine Parameter akzeptiert.

  11. ich habe es auf einer anderen seite umgesetzt (noch nicht öffentlich). ich hatte auf der startseite die ersten 5 artikel mit titel und auszug ausgegeben und die nächsten 5 als liste mit datum und anzahl der kommentare. dadurch war die zeile zu lang und das layout zerschossen. durch die kürzung konnte ich das problem verhindern.

Kommentare sind geschlossen.