PHP best practice in valori di ritorno

1

Per PHP, best practice, ho letto da qualche parte che se si assegnano i dati a una variabile non ci vuole quasi memoria o risorsa.

Diciamo che ho questa funzione che restituisce un conteggio.

public function returnCount($array){
    return count($array);
}

o se è meglio?

public function returnCount($array){
    $count = count($array);
    return $count;
}
    
posta MCHam 19.12.2012 - 17:31
fonte

3 risposte

6

Questo non è un problema di php, quindi potrebbero esserci potenziali domande duplicate. In generale

Il primo approccio (return count (...)) è più veloce da leggere e in alcuni casi produrrà un codice più veloce, a causa del tempo impiegato per creare un'istanza della variabile $ count.

Il secondo approccio è più facile da eseguire il debug e il mantenimento. Ogni operazione si svolge in una riga distinta, che è più facile da isolare quindi eseguire il debug, poiché alcuni IDE possono posizionare un punto di interruzione del debug sulla linea esatta. È anche più facile da mantenere / estendere nel caso in cui si desideri ad esempio registrare il risultato o eseguire un'altra operazione con questo.

Non credo che esista un modo "migliore", o che importi così tanto per uno / due liner. Vorrei usare il primo e poi refactarlo nel caso dovesse essere esteso.

Ciò su cui molte persone sarebbero d'accordo è qualcosa del tipo:

log("$array"); return count($array) * 4 - ($array4==null)?(count($array2)^94):int_val($xyz);

dovrebbe essere meglio suddiviso in righe diverse.

    
risposta data 19.12.2012 - 17:43
fonte
3

Non preoccuparti delle prestazioni in questo caso: questo tipo di micro-ottimizzazione non ha senso, è inutile e, in breve, è una perdita di tempo.

L'unico scenario in cui si introdurranno variabili temporanee per motivi di prestazioni è quando il risultato di un calcolo non banale viene utilizzato più volte e si desidera evitare di eseguire ripetutamente il calcolo. Ad esempio, nel seguente codice:

for ($i = 0; $i < strlen($label); ++$i) {
    print $label[$i] . "; ";
}

... strlen($label) viene eseguito ad ogni iterazione, che è una specie di spreco, orribile quindi se la tua stringa è molto lunga. In questa situazione, è utile calcolare in anticipo la lunghezza della stringa e memorizzarla in una variabile:

$len = strlen($label);
for ($i = 0; $i < $len; ++$i) {
    print $label[$i] . "; ";
}

Tanto per le prestazioni.

In una situazione reale, tuttavia, la prima cosa che si desidera ottimizzare non è rappresentata dalle prestazioni, ma dalla manutenibilità, in questo caso sotto forma di leggibilità. A seconda della situazione, l'introduzione di variabili intermedie può migliorare notevolmente la leggibilità, e non è raro trovare, dopo aver diviso i calcoli complessi usando questa tecnica, che il codice in questione può essere semplificato molto, rendendolo più facile da leggere e più efficiente.

    
risposta data 19.12.2012 - 20:37
fonte
1

Penso che la seconda opzione sia di gran lunga il modo migliore per andare, osservando la funzione che hai è semplicistico dire che la prima opzione è innocua. Ma, considera una situazione in cui davvero non sai se la variabile che stai restituendo contiene effettivamente dei valori. Supponiamo che stiate usando un linguaggio più strongmente tipizzato, in cui non è possibile, ad esempio, restituire una variabile che non è impostata

function returnInt($x) {
    //some calculation to get y
    return $y;
}

Genererà sicuramente un errore (avviso) se x non è impostato. Dovresti controllare la validità della variabile che stai restituendo, e sembrerà sempre un pasticcio se lo fai usando una singola riga di codice (guarda l'esempio di Dimitris). BACIO

    
risposta data 19.12.2012 - 18:49
fonte

Leggi altre domande sui tag