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.

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

Definition von Stored Procedures - eine Einführung

Stored Procedures sind vordefinierte SQL-Codeblöcke, die in einer Datenbank gespeichert sind und bei Bedarf aufgerufen werden können. ...

Bernie

Autor : ebiz-consult GmbH & Co. KG
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

Berechnungen durchführen

Hallo liebe Forenmitglieder, meine erste frage ist zum Aufbau meiner kleinen Berechnungswebseite, nichts kommerzielles, soll nur eine Anwendung f ...

Geschrieben von matze511 am 21.04.2024 21:42:37
Forum: PHP Developer Forum
Professioneller Webentwickler & Webdesigner

Of course, here is the translation: Hello, Thank you for your interest in the long-term project. Your extensive skills and experience in web dev ...

Geschrieben von Athelstan am 15.04.2024 09:25:39
Forum: Jobgesuche
Wir stellen unsere SEO-Agentur vor

Hallo In der heutigen digitalen Welt war es für Unternehmen noch nie so einfach, ihre Reichweite weltweit zu vergrößern. Wenn Sie außerhalb I ...

Geschrieben von thomasmuller am 14.04.2024 07:18:33
Forum: User stellen sich vor
Spielplan für 4 Gruppen zu je 6 Teams auf 2 Feldern

Hallöchen zusammen, ich versuche derzeit unseren Excel-Spielplan in PHP zu überführen. Eigentlich bin ich auch shon fertig - wenn da nicht dies ...

Geschrieben von derH0st am 11.04.2024 15:58:37
Forum: PHP Developer Forum