2015-06-27 4 views
6

fand ich diese seltsame switch-Anweisung in Laravel 5 core:Ist diese Switch-Anweisung kein Unsinn?

switch (count($args)) { 
    case 0: 
     return $instance->$method(); 
    case 1: 
     return $instance->$method($args[0]); 
    case 2: 
     return $instance->$method($args[0], $args[1]); 
    case 3: 
     return $instance->$method($args[0], $args[1], $args[2]); 
    case 4: 
     return $instance->$method($args[0], $args[1], $args[2], $args[3]); 
    default: 
     return call_user_func_array([$instance, $method], $args); 

Gibt es einen Grund, warum sie möglicherweise das eine solche Sache, anstatt nur mit bauen entschieden?

return call_user_func_array([$instance, $method], $args); 

Irgendwelche Vorteile?

+0

Vielleicht wurde dies aus einer Sprache übersetzt, die Funktion Überladung hat. Oder sie stellten fest, dass es in den häufigsten Fällen einen leichten Leistungszuwachs gab (vermutlich wo $ Args 4 oder weniger war). –

+0

Nein das ist nicht Unsinn .. Sprache wie C++ unterstützt dies und seine Funktion Überladung genannt, ** Polymorphismus ** kann durch Überlastung –

+2

@ NullPoiiteja erreicht werden Aber PHP hat keine Funktion überladen. –

Antwort

6

IMHO der Programmierer vermieden call_user_func_array() für eine angemessene Anzahl von typischen Anrufe an $instance->method(). Natürlich ist es schneller, die Methode direkt aufzurufen, anstatt call_user_func_array() zu verwenden. Der Code wurde mit Liebe geschrieben :)

+1

Vielleicht benötigt Laravel bald PHP 5.6+, dann können sie diese kleine Sache machen: 'return $ instance-> method (... $ args);'. –

+3

@RoboRobok Ich stelle mir vor, dass der direkte Einfluss dieses Codes von [diesem Kommentar] (http://php.net/manual/en/function.call-user-func-array.php#100794) auf die Funktion in PHP ist Dokumentation. Github zeigt, dass der Code ursprünglich im Januar 2010 veröffentlicht wurde, daher war der Autor mehr als wahrscheinlich besorgt über die Leistung in PHP 5.3. – patricus

+0

@patricus Guter Fang! Ich frage mich, warum alle Kommentare abgelehnt werden. – hek2mgl

0

Es ist möglich, dass es Funktionen mit bis zu 4 Argumenten gibt, bei denen erwartet wird, dass sie nach Wert statt nach Referenz übergeben werden. Beachten Sie den Hinweis in der Funktionsdokumentation zur Verwendung von PHP 5.4. call_user_func_array docs