Leí en alguna parte que la isset()
función trata una cadena vacía como TRUE
, por isset()
lo tanto, no es una forma efectiva de validar entradas de texto y cuadros de texto de un formulario HTML.
Entonces puede usar empty()
para verificar que un usuario haya escrito algo.
¿Es cierto que la
isset()
función trata una cadena vacía comoTRUE
?Entonces, ¿en qué situaciones debería usar
isset()
? ¿Debería usar siempre!empty()
para comprobar si hay algo?
Por ejemplo en lugar de
if(isset($_GET['gender']))...
Usando esto
if(!empty($_GET['gender']))...
Respuestas:
isset vs.! vacío
TLC:
fuente
empty()
también devuelve verdadero para una matriz vacía.empty()
devuelve VERDADERO para 0, no es una buena idea usar este operador para matemáticas en caso de que "0" sea accidentalmente una cadena. Esto puede resultar peligroso. En su lugar, utilizan básica>
,<
y==
los operadores y variables convierta usandointval()
ofloatval()
.De la forma más general:
isset
prueba si una variable (o un elemento de una matriz, o una propiedad de un objeto) existe (y no es nula)empty
prueba si una variable (...) contiene algunos datos no vacíos.Para responder a la pregunta 1 :
da
Porque la variable
$str
existe.Y pregunta 2 :
Debe utilizar isset para determinar si existe una variable ; por ejemplo, si obtiene algunos datos como una matriz, es posible que deba verificar si hay una clave establecida en esa matriz.
Piense en
$_GET
/$_POST
, por ejemplo.Ahora, trabajar en su valor, cuando sepa que existe tal valor: ese es el trabajo de
empty
.fuente
Tampoco es una buena forma de verificar una entrada válida.
isset()
no es suficiente porque, como ya se ha señalado, considera que una cadena vacía es un valor válido.! empty()
tampoco es suficiente porque rechaza '0', que podría ser un valor válido.El uso
isset()
combinado con una verificación de igualdad contra una cadena vacía es lo mínimo que necesita para verificar que un parámetro entrante tiene un valor sin crear falsos negativos:Pero por "mínimo básico", me refiero exactamente a eso. Todo lo que hace el código anterior es determinar si hay algún valor para
$_GET['gender']
. No , no determinar si el valor$_GET['gender']
es válido (por ejemplo, uno de ).("Male", "Female",
"FileNotFound"
)
Para eso, vea la respuesta de Josh Davis .
fuente
isset
está destinado a ser utilizado solo para variables y no solo valores, por lo queisset("foobar")
generará un error. A partir de PHP 5.5,empty
admite tanto variables como expresiones.Entonces, su primera pregunta debería ser si
isset
devuelve verdadero para una variable que contiene una cadena vacía. Y la respuesta es:Las tablas de comparación de tipos en el manual de PHP son bastante útiles para tales preguntas.
isset
básicamente verifica si una variable tiene algún valor que no sea nulo, ya que las variables no existentes siempre tienen el valor nulo .empty
es una especie de contraparte,isset
pero también trata el valor entero0
y el valor de la cadena"0"
como vacíos. (Nuevamente, eche un vistazo a las tablas de comparación de tipos ).fuente
empty()
también "admite expresiones, en lugar de solo variables" a partir de PHP 5.5.0.Si tiene un $ _POST ['param'] y asume que es de tipo cadena, entonces
es idéntico a
fuente
Puede reescribir eso como "isset () no es una forma de validar la entrada". Para validar la entrada, use la extensión de filtro de PHP .
filter_has_var()
le dirá si la variable existe mientrasfilter_input()
que en realidad filtrará y / o desinfectará la entrada.Tenga en cuenta que no tiene que usar
filter_has_var()
antesfilter_input()
y si solicita una variable que no está configurada,filter_input()
simplemente regresaránull
.fuente
Cuándo y cómo usarlo:
Verdadero para 0, 1, cadena vacía, una cadena que contiene un valor, verdadero, falso
Falso por nulo
p.ej
Falso para 1, una cadena que contiene un valor, verdadero
Verdadero para nulo, cadena vacía, 0, falso, por ejemplo
fuente
isset se utiliza para determinar si existe una instancia de algo, es decir, si se ha instanciado una variable ... no se refiere al valor del parámetro ...
Pascal MARTIN ... +1 ...
empty () no genera una advertencia si la variable no existe ... por lo tanto, se prefiere isset () cuando se prueba la existencia de una variable cuando se pretende modificarla ...
fuente
Usar
empty
es suficiente:Además, si desea un valor entero, también puede valer la pena comprobarlo
intval($variable) !== FALSE
.fuente
empty
...isset
/filter_has_var
debe usarse para verificar si existe var.fuente
Vine aquí buscando una forma rápida de verificar si una variable tiene algún contenido. Ninguna de las respuestas aquí proporcionó una solución completa, así que aquí está:
Basta con comprobar si la entrada es
''
onull
, porque:Solicitar
.../test.php?var=
resultados de URL en$_GET['var'] = ''
Solicitar
.../test.php
resultados de URL en$_GET['var'] = null
isset()
devuelvefalse
solo cuando la variable existe y no está configuradanull
, por lo que si la usa obtendrátrue
cadenas vacías (''
).empty()
considera ambosnull
y''
vacío, pero también se considera'0'
vacío, lo cual es un problema en algunos casos de uso.Si desea tratarlo
'0'
como vacío, utiliceempty()
. De lo contrario, utilice la siguiente verificación:$var .'' !== ''
evalúafalse
solo para las siguientes entradas:''
null
false
Utilizo la siguiente verificación para filtrar también cadenas con solo espacios y saltos de línea:
fuente
Utilizo lo siguiente para evitar avisos, esto verifica si la var está declarada en GET o POST y con el prefijo @ puede verificar con seguridad si no está vacía y evitar el aviso si la var no está configurada:
fuente
@
) no debería ser recomendado y no es necesario para su fragmento. Ésta no es una buena respuesta. Estás haciendo una comparación imprecisa. También puede usar!empty()
.@
le dará problemas con la depuración, el impacto de la página es más lento y aún puede tenererror_log
más de 1 GB en un momento. Solo sea inteligente y use!empty()
,!is_null()
o algo así.isset () se usa para verificar si la variable está configurada con el valor o no y Empty () se usa para verificar si una variable dada está vacía o no.
isset () devuelve verdadero cuando la variable no es nula, mientras que Empty () devuelve verdadero si la variable es una cadena vacía.
fuente
Fuente: Php.net
fuente
isset () prueba si una variable está establecida y no es nula:
http://us.php.net/manual/en/function.isset.php
empty () puede devolver verdadero cuando la variable se establece en ciertos valores:
http://us.php.net/manual/en/function.empty.php
fuente
isset () vs vacío () vs is_null ()
fuente
! empty hará el truco. si solo necesita verificar que los datos existan o no, use isset other empty puede manejar otras validaciones
?>
fuente