Php se la variabile è vuota. Cheat sheet per PHP: FALSE, NULL e valori ad essi associati. FALSO nelle istruzioni If

stringa variabile (12)

Ho una funzione isNotEmpty che restituisce true se la stringa non è vuota e false se la stringa è vuota. Ho scoperto che non funziona se ci passo sopra una riga vuota.

Function isNotEmpty($input) ( $strTemp = $input; $strTemp = trim($strTemp); if(strTemp != "") //Ho provato anche questo "if(strlen($strTemp) > 0)" ( return true ;) restituisce falso;

La stringa viene controllata utilizzando isNotEmpty:

If(isNotEmpty($userinput["phoneNumber"])) ( //convalida il numero di telefono ) else ( echo "Numero di telefono non inserito
"; }

Se la riga è vuota, altrimenti non viene eseguita, non capisco il motivo, qualcuno può far luce su questo per favore.

Risposte

se hai un campo chiamato serial_number e vuoi controllare lo spazio vuoto

$numero_seriale = ritaglio($_POST); $q="seleziona * dal prodotto dove user_id="$_SESSION""; $rs=mysql_query($q); while($riga=mysql_fetch_assoc($rs))( if(empty($_POST["irons"]))( $irons=$riga["prodotto1"]; )

in questo modo puoi scorrere tutti i loop in un ciclo con un'altra funzione vuota

Ebbene, invece di rispondere (credo che tu abbia già risolto il tuo problema), ti darò qualche consiglio.

Non so tutti gli altri, ma personalmente mi arrabbio molto quando vedo qualcosa del tipo:

Se(<>) (restituisce vero;) restituisce falso;

ciò richiede un elegante " return (<>); " Per favore guarda sempre il tuo codice e rimuovi questa logica. Per ogni situazione non è necessaria l'istruzione IF.

Sto semplicemente scrivendo la mia funzione is_string per controllare i tipi e strlen per controllare la lunghezza.

Funzione vuotoStr($str) ( return is_string($str) && strlen($str) === 0; ) print vuotoStr("") ? "vuoto": "non vuoto"; // vuoto

EDIT: puoi anche utilizzare la funzione trim per verificare se una stringa non contiene.

Is_string($str) && strlen(trim($str)) === 0;

PHP ha una funzione incorporata chiamata vuoto() Il test viene eseguito digitando if(empty($string))(...) collegamento php.net: php vuoto

Hai la risposta, ma nel tuo caso puoi usarla

Restituisce vuoto($input);

Restituisce stringa_($input);

Problema semplice. Modifica:

Se(strTemp!= "")

Se($strTemp!= "")

Forse puoi anche cambiarlo in:

Se($strTemp!== "")

poiché != "" restituirà true se si passa il numero numerico 0 e alcuni altri casi a causa della conversione automatica del tipo di PHP.

Tieni inoltre presente che PHP ha già una funzione empty().

PHP valuta una stringa vuota su false, quindi puoi semplicemente usare:

If (trim($userinput["phoneNumber"])) ( // convalida il numero di telefono ) else ( echo "Numero di telefono non inserito
"; }

Utilizzo sempre espressioni regolari per verificare la presenza di una stringa vuota, risalente ai tempi di CGI/Perl e Javascript, quindi perché non PHP ad esempio (anche se non testato)

Restituisce preg_match("/\S/", $input);

Dove \S rappresenta qualsiasi carattere senza spazi

Basta usare la funzione strlen()

If (strlen($s)) ( // non vuoto )

Recentemente mi sono posto la stessa domanda.
Ci sono diverse soluzioni possibili, eccone 3 valide:

  • s.indexOf(starter) === 0
  • s.substr(0,starter.length) === antipasto
  • s.lastIndexOf(starter, 0) === 0 (aggiunto dopo aver visualizzato la risposta di Mark Bayer)
  • utilizzando un ciclo:

    Funzione iniziaCon(s,starter) ( for (var i = 0,cur_c; i< starter.length; i++) { cur_c = starter[i]; if (s[i] !== starter[i]) { return false; } } return true; }

Non ho trovato quest'ultima soluzione che prevede l'utilizzo di un loop.
Sorprendentemente, questa soluzione è significativamente superiore alle prime 3.
Ecco il test jsperf che ho eseguito per arrivare a questa conclusione: http://jsperf.com/startswith2/2

ps: ecmascript 6 (harmony) introduce il proprio metodo startWith per le stringhe.
Pensa quanto tempo si sarebbe risparmiato se avessero pensato di includere questo metodo tanto necessario nella prima versione.

Aggiornamento

Tieni presente che ci sono 2 ottimizzazioni del loop incluse da Steve, la prima delle due ha mostrato prestazioni migliori, quindi pubblicherò il codice di seguito:

La funzione iniziaCon2(str, prefisso) ( if (str.length< prefix.length) return false; for (var i = prefix.length - 1; (i >= 0) && (str[i] === prefisso[i]); --i) continuare;< 0; }

ritorno i

La programmazione moderna manipola con successo da molto tempo variabili non tipizzate. Il tipo della variabile non può essere specificato in anticipo ma può essere modificato durante l'esecuzione del programma.

Questo concetto è diventato fondamentale nel paradigma di programmazione generale. All'inizio dell'era della programmazione, i linguaggi con la stessa assoluta sicurezza richiedevano al programmatore di predefinire le variabili e assicuravano rigorosamente che non venisse loro assegnato nulla di illegale. Né i programmi né i linguaggi di programmazione precedentemente avevano la minima idea che una variabile cambiasse tipo.

La funzione PHP empty() è l'inverso della funzione isset() e presenta alcune funzionalità di utilizzo speciali. Se non è presente alcuna variabile, la prima funzione risponde positivamente e il suo risultato è vero, mentre la seconda risponde negativamente, ovvero il suo valore sarà falso.

Per definizione, isset() è progettato per verificare l'esistenza di una variabile. Non importa cosa e come è stata assegnata la variabile, l'importante è che esista e non venga distrutta dalla funzione unset(). Il risultato della funzione isset() sarà positivo - vero. È importante ricordare che se $iVar = 0; allora isset($iVar) sarà vero, ma anche vuoto($iVar) sarà vero.

Nel primo caso il risultato significa che la variabile esiste, nel secondo caso la variabile è vuota, cioè il valore “0” in qualsiasi forma, sia essa una stringa (“0”) o un numero (frazionario - 0.0 o intero - 0) è lo stesso: vuoto($iVar) sarà vero.

A proposito di sicurezza e controllo

La pratica dimostra che i linguaggi non tipizzati danno molta più libertà al programmatore, ma presuppongono che il suo atteggiamento nei confronti del lavoro sull'algoritmo sia più responsabile.

PHP offre una sintassi moderna che supporta la semantica consolidata, presenta pochi errori, ma richiede un'attenta attenzione. Ad esempio, la chiamata di qualsiasi funzione richiede un certo numero di parametri.

Quando si chiama una funzione non è affatto necessario passare tutti i parametri; è possibile passarne solo una parte significativa. La funzione “deve” verificare la presenza e l'esistenza di tutti i parametri. Quelli che mancano o hanno valori errati devono essere riportati alla forma normale e assegnati i valori richiesti.

In questo contesto, la funzione PHP empty() è essenziale. Espressione:

$a = "1;2" + 20

assegnerà alla variabile $a il valore 21, poiché la prima parte dell'espressione sarà rappresentata come 1 e la seconda sarà 20.

Il risultato sarà di tipo numero e la funzione PHP vuota($a) avrà come risultato falso, ovvero la variabile $a non è vuota.

In questo contesto, avendo una funzione:

funcTest($a ​​= 0, $b = 20)

Quando chiami:

$res = funzTest($aVal, $bVal)

avrà ciò che si desidera, cioè il risultato della funzione. E quando viene chiamato:

  • $res = funzTest($aVal. $bVal)

Il corpo della funzione contiene un solo parametro con il valore "$aVal . $bVal" e molto probabilmente questo parametro verrà interpretato come una stringa di caratteri.

PHP vuoto() per oggetti e array

La sintassi del linguaggio ha un numero sufficiente di costrutti e funzioni per lavorare con oggetti e array, ma dal punto di vista della verifica della loro esistenza e della presenza di un valore, non ci sono differenze particolari rispetto alle variabili.

PHP vuoto (array) - equivalente a chiamare vuoto (variabile semplice). Tuttavia, ci sono considerazioni molto significative riguardo agli oggetti. Per quanto riguarda la verifica dell'esistenza di un oggetto (isset), la domanda difficilmente ha senso. Per quanto riguarda la funzione PHP empty(), l'opportunità del suo utilizzo rimane discutibile.

Secondo la logica della programmazione orientata agli oggetti, un oggetto ha il proprio contenuto e il proprio insieme di metodi. Solo l'oggetto stesso può dire se è vuoto o meno, ma non una funzione di terze parti, anche se fa parte della sintassi del linguaggio.

Un oggetto e la sua funzione empty()

Su questa base semplice ma legittima, ogni oggetto dovrebbe essere considerato nel contesto della sua comprensione del “vuoto”. Ad esempio, l'implementazione dell'oggetto "Tabella del personale" è costituita dai record "Dipendente". Ma se non c'è un solo dipendente, nella "Lista del personale" ci sono sempre opzioni per le posizioni di potenziali dipendenti.

A quale livello dovrei utilizzare la funzione oggetto vuoto PHP qui? A livello "Staffing" esiste tutto, anche se non c'è un solo dipendente. A livello "Dipendente" l'oggetto esiste già, anche se non è completamente riempito. Un oggetto non completamente riempito può essere classificato come oggetto vuoto. Non vi è alcun beneficio da ciò per la tabella del personale.

A seconda del tuo stile di programmazione, le funzioni PHP empty() e isset() sono molto importanti per costruire un algoritmo sicuro e affidabile, ma per gli oggetti è comunque meglio avere una variante di empty() definita dal suo contenuto.

In PHP i valori FALSE e NULL e i valori ad essi associati sono diversi da come sono solitamente in altri linguaggi e hanno caratteristiche proprie non ovvie.
L'articolo discute queste funzionalità.
Per i principianti, questo può essere utile per vedere il quadro completo, per i lettori esperti - per rinfrescarsi la memoria se qualche sfumatura gli è sfuggita di mente.

FALSO nelle istruzioni If

Secondo la documentazione PHP, i seguenti valori sono FALSE dopo il passaggio a booleano:
  • il valore booleano stesso è FALSE
  • una stringa vuota ("") e la stringa "0".
  • array vuoto (array) – array().
  • un oggetto con zero variabili membro (solo PHP 4, non trattato in questo articolo)
  • valore NULL speciale (comprese le variabili non impostate)
  • Oggetti SimpleXML (non trattati in questo articolo)
Ciò significa che se tali valori vengono passati alla condizione:
se (…) echo “1”; altrimenti echo "0";
verrà quindi stampata la stringa "0".

Se il valore della variabile non è impostato (non impostato), potrebbe essere emesso anche un avviso. Ricordiamo che l'avviso presente nella condizione può essere rimosso scrivendo @ prima della variabile.

Per esempio:

Se (@$undefVar) (…)
Ma dovresti usare @ solo in casi estremi, quando hai pensato attentamente e non ci sono altre opzioni adatte. Vedi la funzione isset().

La funzione is_null() e i costrutti del linguaggio isset() e empty()

is_null() restituisce TRUE solo per le variabili a cui non è assegnato alcun valore o a cui è assegnato il valore NULL .
isset() restituisce valori booleani uno a uno rispetto a is_null() .
Se alla variabile non viene assegnato un valore, is_null() emette anche un avviso "Variabile non definita", a differenza di isset(), che non emette alcun avviso.
Ricordiamo che per rimuovere il valore di una variabile è possibile utilizzare la funzione unset(). È inoltre possibile assegnare il valore NULL a questo scopo per evitare avvisi del compilatore quando si tenta di leggere il valore di una variabile.

Tieni presente che, a differenza delle variabili, per lavorare con le costanti devi utilizzare il costrutto define().

Rappresentazione di stringhe

Diamo un'occhiata alla rappresentazione di stringa delle false costanti.
Ad esempio, la concatenazione converte i valori nelle seguenti stringhe, mostrate nella tabella seguente:

L'argomento della conversione in stringhe è descritto più dettagliatamente sul sito ufficiale nel paragrafo Conversione in stringhe.

Operatori di confronto

Passiamo agli operatori di confronto.
Tutti i valori falsi restituiscono vero, come previsto, se confrontati con FALSO utilizzando l'operatore " == ".
Ma non dovresti fare affidamento sulla transitività qui quando confronti tra loro le costanti di false stringhe.
Ecco una tabella completa per confrontare valori falsi (più indica elementi di tabella che, se confrontati utilizzando l'operatore " != ", restituiscono un valore vero:

$undef – una variabile a cui non è stato assegnato un valore

Dalla tabella si possono trarre alcune piacevoli conclusioni:
1. Se sappiamo che utilizziamo solo stringhe, possiamo confrontarle in sicurezza e non preoccuparci che "" (una stringa vuota) sarà uguale a "0".
2. Gli array non sono mai uguali a stringhe, numeri interi o numeri reali.

Poiché i tipi delle diverse false costanti sono diversi, è possibile utilizzare una coppia di operatori === e !== per distinguerle.
L'operatore === restituisce false per tutte le coppie di valori falsi.
Restituisce il valore vero solo per gli argomenti a uno dei quali è assegnato il valore NULL e al secondo non è assegnato alcun valore.

Differenza tra variabili con valore NULL e variabili non definite

L'operatore === consente di distinguere tra tutti i valori falsi, ad eccezione delle variabili con un valore NULL dalle variabili a cui non è stato assegnato un valore.

Tali variabili possono essere distinte utilizzando la funzione get_fine_vars().

Se è necessario determinare se è stato assegnato un valore alla variabile $var, è possibile utilizzare il seguente frammento di codice a tale scopo:
if (array_key_exists("var", get_fine_vars())) ( echo "var è definita"; // $var è assegnato NULL ) else ( echo "var NON è definita"; // $var non è definita o non è impostata($ var) è stato chiamato)

Conclusioni

Dovresti sempre ricordare che in PHP due falsi valori potrebbero non essere uguali tra loro e variabili che a prima vista sembrano diverse potrebbero rivelarsi identiche se confrontate. Per evitare tali sorprese, puoi utilizzare gli operatori === e !==.

Quando si lavora con gli array, per evitare sorprese, è possibile scrivere una funzione per convertire i valori in indici diversi garantiti. Successivamente, è possibile accedere agli elementi dell'array solo utilizzandolo. Ciò potrebbe rallentare il programma, ma aiuterà a evitare sorprese.

Il test è stato effettuato su PHP 5.3.1.

Collegamenti aggiuntivi

1. Tabelle di confronto di tipo PHP.
2. MySQL Null e stringhe vuote nel contesto di PHP.

Tag: aggiungi tag

In PHP i valori FALSE e NULL e i valori ad essi associati sono diversi da come sono solitamente in altri linguaggi e hanno caratteristiche proprie non ovvie.
L'articolo discute queste funzionalità.
Per i principianti, questo può essere utile per vedere il quadro completo, per i lettori esperti - per rinfrescarsi la memoria se qualche sfumatura gli è sfuggita di mente.

FALSO nelle istruzioni If

Secondo la documentazione PHP, i seguenti valori sono FALSE dopo il passaggio a booleano:
  • il valore booleano stesso è FALSE
  • una stringa vuota ("") e la stringa "0".
  • array vuoto (array) – array().
  • un oggetto con zero variabili membro (solo PHP 4, non trattato in questo articolo)
  • valore NULL speciale (comprese le variabili non impostate)
  • Oggetti SimpleXML (non trattati in questo articolo)
Ciò significa che se tali valori vengono passati alla condizione:
se (…) echo “1”; altrimenti echo "0";
verrà quindi stampata la stringa "0".

Se il valore della variabile non è impostato (non impostato), potrebbe essere emesso anche un avviso. Ricordiamo che l'avviso presente nella condizione può essere rimosso scrivendo @ prima della variabile.

Per esempio:

Se (@$undefVar) (…)
Ma dovresti usare @ solo in casi estremi, quando hai pensato attentamente e non ci sono altre opzioni adatte. Vedi la funzione isset().

La funzione is_null() e i costrutti del linguaggio isset() e empty()

is_null() restituisce TRUE solo per le variabili a cui non è assegnato alcun valore o a cui è assegnato il valore NULL .
isset() restituisce valori booleani uno a uno rispetto a is_null() .
Se alla variabile non viene assegnato un valore, is_null() emette anche un avviso "Variabile non definita", a differenza di isset(), che non emette alcun avviso.
Ricordiamo che per rimuovere il valore di una variabile è possibile utilizzare la funzione unset(). È inoltre possibile assegnare il valore NULL a questo scopo per evitare avvisi del compilatore quando si tenta di leggere il valore di una variabile.

Tieni presente che, a differenza delle variabili, per lavorare con le costanti devi utilizzare il costrutto define().

Rappresentazione di stringhe

Diamo un'occhiata alla rappresentazione di stringa delle false costanti.
Ad esempio, la concatenazione converte i valori nelle seguenti stringhe, mostrate nella tabella seguente:

L'argomento della conversione in stringhe è descritto più dettagliatamente sul sito ufficiale nel paragrafo Conversione in stringhe.

Operatori di confronto

Passiamo agli operatori di confronto.
Tutti i valori falsi restituiscono vero, come previsto, se confrontati con FALSO utilizzando l'operatore " == ".
Ma non dovresti fare affidamento sulla transitività qui quando confronti tra loro le costanti di false stringhe.
Ecco una tabella completa per confrontare valori falsi (più indica elementi di tabella che, se confrontati utilizzando l'operatore " != ", restituiscono un valore vero:

$undef – una variabile a cui non è stato assegnato un valore

Dalla tabella si possono trarre alcune piacevoli conclusioni:
1. Se sappiamo che utilizziamo solo stringhe, possiamo confrontarle in sicurezza e non preoccuparci che "" (una stringa vuota) sarà uguale a "0".
2. Gli array non sono mai uguali a stringhe, numeri interi o numeri reali.

Poiché i tipi delle diverse false costanti sono diversi, è possibile utilizzare una coppia di operatori === e !== per distinguerle.
L'operatore === restituisce false per tutte le coppie di valori falsi.
Restituisce il valore vero solo per gli argomenti a uno dei quali è assegnato il valore NULL e al secondo non è assegnato alcun valore.

Differenza tra variabili con valore NULL e variabili non definite

L'operatore === consente di distinguere tra tutti i valori falsi, ad eccezione delle variabili con un valore NULL dalle variabili a cui non è stato assegnato un valore.

Tali variabili possono essere distinte utilizzando la funzione get_fine_vars().

Se è necessario determinare se è stato assegnato un valore alla variabile $var, è possibile utilizzare il seguente frammento di codice a tale scopo:
if (array_key_exists("var", get_fine_vars())) ( echo "var è definita"; // $var è assegnato NULL ) else ( echo "var NON è definita"; // $var non è definita o non è impostata($ var) è stato chiamato)

Conclusioni

Dovresti sempre ricordare che in PHP due falsi valori potrebbero non essere uguali tra loro e variabili che a prima vista sembrano diverse potrebbero rivelarsi identiche se confrontate. Per evitare tali sorprese, puoi utilizzare gli operatori === e !==.

Quando si lavora con gli array, per evitare sorprese, è possibile scrivere una funzione per convertire i valori in indici diversi garantiti. Successivamente, è possibile accedere agli elementi dell'array solo utilizzandolo. Ciò potrebbe rallentare il programma, ma aiuterà a evitare sorprese.

Se, quando si lavora con le stringhe, è necessario verificare se una stringa è vuota, i programmatori principianti di solito utilizzano questa funzione strlen(). Questa funzione è abbastanza veloce perché non esegue alcun calcolo, ma restituisce semplicemente il valore già noto della lunghezza della stringa, disponibile in zval (PHP utilizza una struttura C per memorizzare le variabili). Ma comunque, perché strlen()- questa è una funzione, è un po' lenta perché richiede diverse azioni quando viene chiamata, come la conversione in minuscolo e la ricerca nella tabella hash. In alcuni casi, puoi aumentare la velocità di esecuzione del codice utilizzando vuoto()..., ma anche vuoto() Puoi ancora ottimizzarlo un po'.

Facciamo un esempio Per esempio controllando il percorso dell'immagine, la funzione controlla se il percorso è vuoto, quindi lo sostituisce con un altro percorso, ad esempio “images/noimage.jpg”.

E quindi l'intero compito si riduce a verificare se una variabile di tipo stringa è vuota. Proviamo 4 modi:

  • if(strlen($img_percorso)>0)
  • if($img_percorso(0))
  • if(vuoto($img_percorso))
  • e un altro modo per ultimo.

E quindi scriveremo nel primo modo:

Funzione check_image_path($img_path) ( if (strlen ($img_path) >0) ( $img_path = "images/noimage.jpg" ; ) return $img_path ;)

Eseguiamo i test, il tempo medio di test impiegato 1.43795800209 sez.

Riflettendoci un po' di più... È possibile accedere al primo carattere della riga in una sola volta, invece che all'intera riga. Se il primo carattere è presente, la stringa non è vuota. Il primo carattere della riga è numerato con "0".

Funzione check_image_path($img_path) ( if ($img_path ( 0 ) ) ( $img_path = "images/noimage.jpg" ; ) return $img_path ; )

tempo medio di prova impiegato 1.19431300163 sec., 17% del tempo giocato

Proviamo a scrivere usando empty() ora:

Funzione check_image_path($img_path) ( if (vuoto ($img_path) ) ( $img_path = "images/noimage.jpg" ; ) return $img_path ; )

tempo medio di prova impiegato 1.1341319084 sec., il 5% del tempo riprodotto dall'esempio precedente

Ora diamo un'occhiata al penultimo e ultimo esempio sopra di noi. Vediamo come questo può essere combinato. pensa... in quale altro modo puoi ottimizzare?

Funzione check_image_path($img_path) ( if (vuoto ($img_path ( 0 ) ) ) ( $img_path = "images/noimage.jpg" ; ) return $img_path ; )

tempo medio di prova impiegato 1.07465314865 sec., e ancora una volta abbiamo vinto il 5% delle volte...

Come funziona e perché è più veloce? Ma $img_percorso(0) restituisce il primo carattere... e poi la funzione vuoto() verifica la presenza di una stringa vuota... la differenza rispetto all'esempio precedente è che alla funzione viene passato solo un carattere e non l'intera stringa. Quindi, dal primo all'ultimo esempio, abbiamo vinto 25% tempo.