eddi: String als Funktion ausführen

Beitrag lesen

Re:

http://de3.php.net/manual/de/function.call-user-func.php
Wofür soll das gut sein, sehe da noch keinen Verwendungszweck?
Aber muss ja einen Sinn haben sonst gäbe es das nicht.

function friseur ($type) {
    print "Sie möchten einen $type-Kopf, kein Problem<br>";
}
call_user_func ('friseur', "Bubi");
call_user_func ('friseur', "Pilz");

Warum also nicht gleich:
friseur('Bubi');
friseur('Pilz');

Für die Programmierung von komplexeren Anwendungen bin ich sehr dankbar, daß es diese Möglichkeit gibt und ich greife auch immer wieder darauf zurück. Ein vielleicht nachvollziehbares Fallbeispiel:

Ein Programm wie ein Server oder eine GUI-Anwendung (beide lassen sich hervorragend mit PHP realisieren) bekommt zur Laufzeit einen Interrupt und muß abhängig davon, welche Art die Unterbrechung ist, darauf unterschiedlich reagieren. Du als Programmierer hast nun die Möglichkeit mit Kontrollstruktur zu arbeiten oder oder gleich mit Variablen ;)

  
<?php  
declare(ticks = 1);  
function sig_handler($signo){  
     #Kontrollstruktur  
     switch ($signo) {  
         case SIGTERM:  
             sig_term();  
             break;  
         case SIGHUP:  
             sig_hup();  
             break;  
         case SIGUSR1:  
             sig_usr();  
             break;  
         default:  
             exit(1);  
     }  
}  
pcntl_signal(SIGTERM, "sig_handler");  
pcntl_signal(SIGHUP,  "sig_handler");  
pcntl_signal(SIGUSR1, "sig_handler");  
?>  
<?php  
declare(ticks = 1);  
function sig_handler($signo){  
     #Variable  
     $a=(SIGTERM=>'sig_term',  
         SIGHUP =>'sig_hup',  
         SIGUSR1=>'sig_usr'  
        );  
     @call_user_func($a[$signo]) || exit(1);  
}  
pcntl_signal(SIGTERM, "sig_handler");  
pcntl_signal(SIGHUP,  "sig_handler");  
pcntl_signal(SIGUSR1, "sig_handler");  
?>  

Beides ist möglich, aber wenn Du auf mehr als 3 verschiedene Inerrupts achent sollst, dann wird das ganze auch schnell unübersichtlich. (Hinzukommt, daß diese  Methodik auch schneller abgearbeitet wird, als die Abarbeitung von Kontrollstrukturen.)

Gruß aus Berlin!
eddi