2010-02-03 14 views
5

Una domanda molto basilare, ma volevo un consiglio da parte degli esperti per cui pubblicarlo qui.Quale approccio delle funzioni dovrei usare

Qui ci sono due funzioni,
qual è la differenza tra i due? Entrambi sono ugualmente efficienti e includono le migliori pratiche o Quale di loro è meglio usare nella programmazione.

function is_numeric($number) 
{ 
    if(!preg_match("/^[0-9]+$/",$number)) 
     return false; 
    return true; 
} 

function is_numeric($number) 
{ 
    if(preg_match("/^[0-9]+$/",$number)) 
     return true; 
    else 
     return false; 
} 

risposta

16

Alcuni standard di codifica indicano che il primo ramo dovrebbe essere quello che è più probabile, mentre il ramo else dovrebbe far fronte alle cose più eccezionali.

Ma questo è totalmente esoterico, scegli quello che vuoi.

A mio parere personale, piuttosto utilizzare

function is_numeric($number) 
{ 
    return preg_match("/^[0-9]+$/",$number); 
} 

come preg_match ritorna un valore booleano.

+3

+1 Buon punto: non c'è bisogno di diramarti qui. –

+0

sì, +1 anche da me risposta molto intelligente. grazie Mr. Müller –

+1

In realtà preg \ _match() restituisce 0 o 1. Ma se utilizzato in un contesto booleano, php li trasmette a FALSE o TRUE. In linguaggi come C# non esiste un cast così implicito e dovresti scrivere qualcosa come 'return 1 === preg_match (...)' – VolkerK

6

Sono equivalenti: scegliere quello che si trova per essere più leggibile.

Io personalmente tendono a lasciare di eventuali else dichiarazioni sui condizionali se non ho bisogno di loro, ma questa è una questione di programmazione stile piuttosto che una questione di una prestazione programmatica o correttezza.

Entrambi questi esempi di codice sono funzionalmente identici e funzioneranno in modo identico.

+0

Grazie per la tua risposta Mr. Hare :) –

+0

Accetto, scegli sempre l'opzione più leggibile e non la più facile da scrivere. Questo è basato sulla teoria che scrivi il codice una volta ma lo leggi molte più volte. – DanDan

4

PHP ha una funzione is_numeric() incorporata: http://php.net/manual/en/function.is-numeric.php perché non utilizzarla.

+0

:) Il link "http://in.php.net/manual/en/function.is-numeric.php" dice che "Le stringhe numeriche consistono in un segno opzionale, un numero qualsiasi di cifre, una parte decimale facoltativa e facoltativo parte esponenziale.Quindi + 0123.45e6 è un valore numerico valido. Anche la notazione esadecimale (0xFF) è consentita ma solo senza segno, decimale ed esponenziale. " –

+0

Prova a cercare la funzione' ctype_digit() 'Tuttavia, non sono sicuro che i parametri di input debbano essere esplicitamente una stringa o se accetterà qualsiasi tipo di oggetto –

+0

in ctype_digit() il tuo parametro dovrebbe essere racchiuso tra virgolette. Se ti piace questo ctype_digit (57), restituirà false –

4

ne dite:

function is_numeric($number) 
{ 
    return preg_match("/^[0-9]+$/",$number); 
} 

Questo non sta per causare una differenza di prestazioni però.

+0

Grazie per la risposta, Ma Steffen Müller ha già risposto che :) –

3

ne dite:

function is_numeric($number) { 
    return preg_match("/^[0-9]+$/",$number); 
} 
4

Dal punto di vista leggibilità è meglio avere clausole positivi, perché le persone tendono a perdere l'! quando leggono la fonte, che porta a una comprensione errata del codice e spesso come risultato: bug.

Steffen ha un punto valido. Penso che dipenda dalla dimensione dei due blocchi di codice. Se sono più o meno uguali, utilizzerei la clausola non negata nella dichiarazione if.

+0

sì, molto vero. C'è un'alta possibilità di perdere il "!" mentre leggi la fonte. –