create_function

(PHP 4 >= 4.0.1, PHP 5, PHP 7)

create_functionErzeugt eine Funktion dynamisch durch Auswertung einer Zeichenkette mit Code

Warnung

Diese Funktion ist seit PHP 7.2.0 DEPRECATED (veraltet) und seit PHP 8.0.0 ENTFERNT. Von der Verwendung dieser Funktion wird dringend abgeraten.

Beschreibung

create_function(string $args, string $code): string

Erzeugt aus den übergebenen Parametern dynamisch eine Funktion und gibt einen eindeutigen Namen für sie zurück.

Achtung

Diese Funktion führt intern eval() aus und hat daher die gleichen Sicherheitsprobleme wie eval(). Außerdem zeigt diese Funktion ein schlechtes Verhalten in Bezug auf Leistung und Speicherverbrauch, da die erzeugten Funktionen global sind und nicht mehr freigegeben werden können.

Stattdessen sollten die nativ vorhandenen anonymen Funktionen verwendet werden.

Parameter-Liste

Normalerweise ist es ratsam, diese Parameter als Zeichenketten in einfachen Anführungszeichen zu übergeben. Wenn sie in doppelten Anführungszeichen übergeben werden, müssen die Variablennamen im Code sorgfältig maskiert werden, z. B. \$somevar.

args

Die Funktionsargumente in Form einer einzelnen durch Komma getrennten Zeichenkette.

code

Der Code der Funktion.

Rückgabewerte

Gibt einen eindeutigen Funktionsnamen als Zeichenkette zurück. Bei einem Fehler wird false zurückgegeben. Es ist zu beachten, dass der Name ein nicht druckbares Zeichen enthält ("\0"), weshalb Vorsicht geboten ist, wenn der Name gedruckt oder in eine andere Zeichenkette eingefügt werden soll.

Beispiele

Beispiel #1 Dynamisches Erzeugen einer Funktion, mit create_function() oder anonymen Funktionen

Eine dynamisch erstellte Funktion kann verwendet werden, um (zum Beispiel) eine Funktion aus Informationen zu erstellen, die zur Laufzeit gesammelt wurden. Zuerst unter Verwendung von create_function():

<?php
$newfunc 
create_function('$a,$b''return "ln($a) + ln($b) = " . log($a * $b);');
echo 
$newfunc(2M_E) . "\n";
?>

Und nun der gleiche Code unter Verwendung einer anonymen Funktion. Zu beachten ist, dass der Code und die Parameter nicht mehr in Zeichenketten eingebettet sind:

<?php
$newfunc 
= function($a,$b) { return "ln($a) + ln($b) = " log($a $b); };
echo 
$newfunc(2M_E) . "\n";
?>

Das oben gezeigte Beispiel erzeugt folgende Ausgabe:

ln(2) + ln(2.718281828459) = 1.6931471805599

Beispiel #2 Erstellen einer allgemeinen Verarbeitungsfunktion mit create_function() oder anonymen Funktionen

Eine andere Verwendungsmöglichkeit wäre, eine allgemeine Verarbeitungsfunktion zu erstellen, die eine Reihe von Operationen auf eine Liste von Parametern anwenden kann:

<?php
function process($var1$var2$farr)
{
    foreach (
$farr as $f) {
        echo 
$f($var1$var2) . "\n";
    }
}

// Nun erzeugen wir eine Reihe mathematischer Funktionen
$farr = array(
    
create_function('$x,$y''return "etwas Trigonometrie: ".(sin($x) + $x*cos($y));'),
    
create_function('$x,$y''return "eine Hypotenuse: ".sqrt($x*$x + $y*$y);'),
    
create_function('$a,$b''if ($a >=0) {return "b*a^2 = ".$b*sqrt($a);} else {return false;}'),
    
create_function('$a,$b'"return \"min(b^2+a, a^2,b) = \".min(\$a*\$a+\$b,\$b*\$b+\$a);"),
    
create_function('$a,$b''if ($a > 0 && $b != 0) {return "ln(a)/b = ".log($a)/$b; } else { return false; }')
);

echo 
"\nWir benutzen nun das erste Array von dynamischen Funktionen\n";
echo 
"Parameter: 2.3445, M_PI\n";
process(2.3445M_PI$farr);

// Nun erzeugen wir eine Reihe von Funktionen zur Bearbeitung von Zeichenketten
$garr = array(
    
create_function('$b,$a''if (strncmp($a, $b, 3) == 0) return "** \"$a\" '.
    
'und \"$b\"\n** sehen für mich gleich aus! (unter Betrachtung der ersten 3 Zeichen)";'),
    
create_function('$a,$b''return "CRCs: " . crc32($a) . ", ".crc32($b);'),
    
create_function('$a,$b''return "similar(a,b) = " . similar_text($a, $b, $p) . "($p%)";')
    );
echo 
"\nWir benutzen nun das zweite Array von dynamischen Funktionen\n";
process("Twas brilling and the slithy toves""Twas the night"$garr);
?>

Hier ist noch einmal derselbe Code unter Verwendung einer anonymen Funktion. Es ist zu beachten, dass die Variablennamen in diesem Code nicht mehr maskiert werden müssen, da sie sich nicht in einer Zeichenkette befinden.

<?php
function process($var1$var2$farr)
{
    foreach (
$farr as $f) {
        echo 
$f($var1$var2) . "\n";
    }
}

// Nun erzeugen wir eine Reihe mathematischer Funktionen
$farr = array(
    function(
$x,$y) { return "etwas Trigonometrie: ".(sin($x) + $x*cos($y)); },
    function(
$x,$y) { return "eine Hypotenuse: ".sqrt($x*$x $y*$y); },
    function(
$a,$b) { if ($a >=0) {return "b*a^2 = ".$b*sqrt($a);} else {return false;} },
    function(
$a,$b) { return "min(b^2+a, a^2,b) = " min($a*$a+$b$b*$b+$a); },
    function(
$a,$b) { if ($a && $b != 0) {return "ln(a)/b = ".log($a)/$b; } else { return false; } }
);

echo 
"\nWir benutzen nun das erste Array von dynamischen Funktionen\n";
echo 
"Parameter: 2.3445, M_PI\n";
process(2.3445M_PI$farr);

// Nun erzeugen wir eine Reihe von Funktionen zur Bearbeitung von Zeichenketten
$garr = array(
    function(
$b,$a) { if (strncmp($a$b3) == 0) return "** \"$a\" " .
        
"und \"$b\"\n** sehen für mich gleich aus! (unter Betrachtung der ersten 3 Zeichen"; },
    function(
$a,$b) { return "CRCs: " crc32($a) . ", ".crc32($b); },
    function(
$a,$b) { return "similar(a,b) = " similar_text($a$b$p) . "($p%)"; }
);
echo 
"\nWir benutzen nun das zweite Array von dynamischen Funktionen\n";
process("Twas brilling and the slithy toves""Twas the night"$garr);
?>

Das oben gezeigte Beispiel erzeugt folgende Ausgabe:

Wir benutzen nun das erste Array von dynamischen Funktionen
Parameter: 2.3445, M_PI
etwas Trigonometrie: -1.6291725057799
eine Hypotenuse: 3.9199852871011
b*a^2 = 4.8103313314525
min(b^2+a, a^2,b) = 8.6382729035898
ln(a)/b = 0.27122299212594

Wir benutzen nun das zweite Array von dynamischen Funktionen
** "Twas the night" und "Twas brilling and the slithy toves"
** sehen für mich gleich aus! (unter Betrachtung der ersten 3 Zeichen)
CRCs: 3569586014, 342550513
similar(a,b) = 11(45.833333333333%)

Beispiel #3 Gebrauch der anonymen Funktionen als Callback-Funktion

Wahrscheinlich liegt der häufigste Anwendungsfall für dynamische Funktionen darin, sie als Callbacks zu übergeben, also z. B. beim Gebrauch von array_walk() oder usort().

<?php
$av 
= array("the ""a ""that ""this ");
array_walk($avcreate_function('&$v,$k''$v = $v . "mango";'));
print_r($av);
?>

Umgewandelt in eine anonyme Funktion:

<?php
$av 
= array("the ""a ""that ""this ");
array_walk($av, function(&$v,$k) { $v $v "mango"; });
print_r($av);
?>

Das oben gezeigte Beispiel erzeugt folgende Ausgabe:

Array
(
  [0] => the mango
  [1] => a mango
  [2] => that mango
  [3] => this mango
)

Sortieren von Zeichenketten von der längsten zur kürzesten mit create_function():

<?php
$sv 
= array("small""a big string""larger""it is a string thing");
echo 
"Original:\n";
print_r($sv);
echo 
"Sortiert:\n";
usort($svcreate_function('$a,$b','return strlen($b) - strlen($a);'));
print_r($sv);
?>

Umgewandelt in eine anonyme Funktion:

<?php
$sv 
= array("small""a big string""larger""it is a string thing");
echo 
"Original:\n";
print_r($sv);
echo 
"Sortiert:\n";
usort($sv, function($a,$b) { return strlen($b) - strlen($a); });
print_r($sv);
?>

Das oben gezeigte Beispiel erzeugt folgende Ausgabe:

Original:
Array
(
  [0] => small
  [1] => a big string
  [2] => larger
  [3] => it is a string thing
)
Sortiert:
Array
(
  [0] => it is a string thing
  [1] => a big string
  [2] => larger
  [3] => small
)

Siehe auch

Hier Kannst Du einen Kommentar verfassen


Bitte gib mindestens 10 Zeichen ein.
Wird geladen... Bitte warte.
* Pflichtangabe
Es sind noch keine Kommentare vorhanden.

PHP cURL-Tutorial: Verwendung von cURL zum Durchführen von HTTP-Anfragen

cURL ist eine leistungsstarke PHP-Erweiterung, die es Ihnen ermöglicht, mit verschiedenen Servern über verschiedene Protokolle wie HTTP, HTTPS, FTP und mehr zu kommunizieren. ...

TheMax

Autor : TheMax
Kategorie: PHP-Tutorials

Midjourney Tutorial - Anleitung für Anfänger

Über Midjourney, dem Tool zur Erstellung digitaler Bilder mithilfe von künstlicher Intelligenz, gibt es ein informatives Video mit dem Titel "Midjourney Tutorial auf Deutsch - Anleitung für Anfänger" ...

Mike94

Autor : Mike94
Kategorie: KI Tutorials

Grundlagen von Views in MySQL

Views in einer MySQL-Datenbank bieten die Möglichkeit, eine virtuelle Tabelle basierend auf dem Ergebnis einer SQL-Abfrage zu erstellen. ...

admin

Autor : admin
Kategorie: mySQL-Tutorials

Tutorial veröffentlichen

Tutorial veröffentlichen

Teile Dein Wissen mit anderen Entwicklern weltweit

Du bist Profi in deinem Bereich und möchtest dein Wissen teilen, dann melde dich jetzt an und teile es mit unserer PHP-Community

mehr erfahren

Tutorial veröffentlichen

Ein data POST via Curl funktioniert nicht.

Anmorg93 Respekt, du bist ja nur um rund 10 Jahre zu spät dran.

Geschrieben von scatello am 21.11.2024 10:57:00
Forum: PHP Developer Forum
Ein data POST via Curl funktioniert nicht.

Hey, hatte auch mal das Problem. Oft liegt’s an fehlenden oder falschen Headern. Probier mal:​ $ch = curl_init(); curl_setopt($ch, CURLOPT_UR ...

Geschrieben von Anmorg93 am 21.11.2024 10:48:17
Forum: PHP Developer Forum
Probleme mit einem Linux-Befehl...

guten Tag liebe Community ;) hallo liebe Freunde auf der php-Ressource, hoffe, das landet im richtigen Unterforum also, womit ich im Moment zu ...

Geschrieben von dhubs am 15.11.2024 16:21:52
Forum: Off-Topic Diskussionen
ein .htaccess-File für eine WordPress-Installation - wie gehe ich hier vor.?

hallo und guten Tag, wie lege ich denn einen .htaccess für eine WordPress-Installation an - wie gehe ich hier vor. Kann man das denn so mache ...

Geschrieben von dhubs am 13.11.2024 15:52:54
Forum: Webmaster