2015-06-27 7 views
6

ho trovato questo switch strano in Laravel 5 core:Non è un'affermazione di questo switch?

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); 

C'è qualche motivo per cui forse deciso di costruire una cosa del genere invece di utilizzare questo?

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

Eventuali vantaggi?

+0

Forse questo è stato tradotto da una lingua che ha sovraccarico di funzione. Oppure, hanno scoperto che c'era un leggero aumento delle prestazioni nei casi più comuni (presumibilmente dove $ args era 4 o meno). –

+0

No, questo non ha senso ... linguaggio simile al C++ supporta questo e il suo sovraccarico di funzioni chiamato, ** Il polimorfismo ** può essere ottenuto attraverso l'overloading –

+2

@ NullPoiиteя Ma PHP non ha sovraccarico di funzioni. –

risposta

6

IMHO il programmatore ha evitato il call_user_func_array() per un numero ragionevole di chiamate tipiche a $instance->method(). Ovviamente è più rapido chiamare il metodo direttamente anziché utilizzare call_user_func_array(). Il codice è stato scritto con amore :)

+1

Forse Laravel richiede presto PHP 5.6+, quindi saranno in grado di fare questa piccola cosa di fantasia: 'return $ instance-> method (... $ args);'. –

+3

@RoboRobok Immagino che l'influenza diretta di questo codice provenga da [questo commento] (http://php.net/manual/en/function.call-user-func-array.php#100794) sulla funzione in PHP documentazione. Github mostra che il codice era stato originariamente commesso nel gennaio 2010, quindi l'autore era più che probabile preoccupato per le prestazioni in PHP 5.3. – patricus

+0

@patricus Buona cattura! Ti chiedi perché tutti i commenti non sono stati votati. – hek2mgl

0

È possibile che esistano funzioni con un massimo di 4 argomenti che si prevede passino per valore anziché passare per riferimento. Si noti la nota sulla documentazione della funzione sull'utilizzo di pre PHP 5.4. call_user_func_array docs

Problemi correlati