$myfunc = create_function( '$param1', 'echo $param1;' );
$myfunc( "Hallo Welt!" ); //Ausgabe: Hallo Welt!
Ab PHP 5.3
$myfunc = function( $param1 ){
echo $param1;
};
$myfunc( "Hallo Welt!" ); //Ausgabe: Hallo Welt!
==== Closure ====
Eine Closure ist eine anonyme Funktion, die sich ihren Erstellungskontext merkt.
Ab PHP 4.0.1
function Add( $param_to_add ){
return create_function( '$param1', 'return '. $param_to_add .' + $param1;' );
}
$myfunc_add4 = Add( 4 );
$myfunc_add3 = Add( 3 );
echo $myfunc_add4( 6 ); //Ausgabe: 10
echo $myfunc_add3( 6 ); //Ausgabe: 9
Ab PHP 5.3
$add = function($param_to_add) {
return function ($param1) use ($param_to_add) {
return $param1 + $param_to_add;
};
};
$myfunc_add4 = $add( 4 );
$myfunc_add3 = $add( 3 );
echo $myfunc_add4( 6 ); // Ausgabe: 10
echo $myfunc_add3( 6 ); // Ausgabe: 9
==== Anwendungsbeispiel ====
=== Farbiger Zeilenwechsel ===
Leider unterstützt PHP bis Version 5.3 keine Referenz von Variablen bei der Lambda-Funktion (Closure).\\
Deshalb wird die **GLOBALE Variable (cycleItems )** benötigt, über die dann iteriert wird.\\
Der Variablenname wird bei der Erstellung der anonymen Funktion mit übergeben.
//cycle: mit parameter des variablennamen
function cycle( $cycleVarName ){
//closure: globale variable wird in der funktion erstellt
return create_function( '', '
//zugriff auf globale varibale
global $'.$cycleVarName.';
//aktuelle element holen
$elm = each( $'.$cycleVarName.' );
//wenn aktuelles element null ist, dann liste auf anfang setzen
if( $elm === FALSE ){
//auf anfang
reset( $'.$cycleVarName.' );
//aktuelles element holen
$elm = each( $'.$cycleVarName.' );
}
//wert liefern
return $elm["value"] ;
');
}
$cycleItems = array( "zeile_1", "zeile_2", "zeile_3" );
$class_fuer_farbwechsel = cycle( "cycleItems" );
//html
echo ''; // Ausgabe:
echo ''; // Ausgabe:
echo ''; // Ausgabe:
echo ''; // Ausgabe:
echo ''; // Ausgabe:
echo ''; // Ausgabe:
Ab PHP 5.3 wird das Ganze einfacher.
//cycle: parameter werden als argumentarray in der funktion gelesen
function cycle() {
$items = func_get_args();
//closure: argumentarray wird als referenz uebergeben
return function() use (&$items) {
//aktuelles element holen
$elm = each($items);
//wenn aktuelles element null ist, dann liste auf anfang setzen
if ($elm === FALSE) {
//auf anfang
reset($items);
//aktuelles element holen
$elm = each($items);
}
//wert liefern
return $elm['value'];
};
}
$class_fuer_farbwechsel = cycle( "zeile_1", "zeile_2", "zeile_3" );
//html
echo ''; // Ausgabe:
echo ''; // Ausgabe:
echo ''; // Ausgabe:
echo ''; // Ausgabe:
echo ''; // Ausgabe:
echo ''; // Ausgabe:
=== Array Beispiele ===
[[http://stackoverflow.com/questions/2412299/how-do-you-use-anonymous-functions-in-php#2412360|Callback für Array-Funktionen]] \\
[[http://stackoverflow.com/questions/2412299/how-do-you-use-anonymous-functions-in-php#2412659|Buchstaben in einem Array zählen]]