En PHP, ¿cuáles son las diferencias entre NULL y establecer una cadena igual a 2 comillas simples?

StackOverflow https://stackoverflow.com/questions/624922

  •  05-07-2019
  •  | 
  •  

Pregunta

Solía ??establecer cosas como esta cuando quería valores en blanco.

$blankVar = '';

Luego de algunos meses, decidí que esto se veía mejor y tenía una intención más clara.

$blankVar = null;

Esto funcionó sin problemas durante un tiempo, pero recientemente, con una declaración preparada de DOP, encontré un problema. La vinculación de un valor a nulo hizo que la consulta fallara, mientras que la vinculación a '' no lo hizo. Necesitaba vincularlo a nulo, de modo que si se cumplía una condición, insertaría datos en blanco.

¿Cuáles son las diferencias entre los 2? Sigo pensando que igualar nulo (o al menos una constante) se ve mejor, ¿debería hacerlo?

define('EMPTY', '');
¿Fue útil?

Solución

Null es solo otro tipo de datos en PHP, que tiene un solo valor (null). Dado que PHP es un lenguaje mal escrito, puede confundir cómo maneja diferentes valores.

" " ;, 0, " 0 " ;, False, array (), Null se consideran Falso en PHP.

Nulo, sin embargo, es un tipo diferente de animal. La incompatibilidad de main con el uso de Null es que no se puede saber si emite ().

$x = false;
isset($x)  ->  true
echo $x    ->  ""

$y = null;
isset($y)  ->  false
echo $y    ->  ""

//$z is not set
isset($z)  ->  false
echo $z    ->  E_NOTICE

Así que nulo es extraño en el sentido de que no sigue las reglas de variables normales en PHP (al menos algunas). En la mayoría de los casos, está bien.

Cuando se trata de columnas de base de datos, el NULL de PHP no tiene lugar allí. Ves, SQL es un lenguaje basado en cadenas. El NULL de SQL debe estar representado por NULL sin comillas.

Si desea un campo VACÍO, configúrelo en " "

INSERT INTO foo SET bar = ""

Pero si desea un campo NULL, configúrelo en NULL

INSERT INTO foo SET bar = NULL

GRAN DIFERENCIA.

Pero si intenta insertar el NULL de PHP directamente, agregará cero caracteres a la consulta (lo que lo deja con un error de sintaxis o en blanco, dependiendo de si lo ha citado).

Otros consejos

null es un valor especial de marcador de posición en el lenguaje de programación que literalmente significa " nada " No es 0, no es una cadena vacía, no es nada. No hay valor en la memoria a la que se apunta. Una cadena vacía, por otro lado, sigue siendo un objeto de cadena, solo uno muy corto :)

Bueno, una cosa es lo bonito que se ve cada enfoque, pero la principal diferencia es que una es una cadena vacía y la otra es una variable no inicializada (nula)

Aparte de las diferencias declaradas por Rex, hay dos tipos de comparaciones en PHP, sueltas y estrictas:

http://www.php.net/manual/en/types .comparisons.php

Si se usan comparaciones estrictas o funciones como is_null () en cualquier capacidad, obtendrá resultados diferentes. Sin embargo, con comparaciones sueltas, PHP es bastante indulgente.

No lo sé con certeza, pero es posible que pueda usar su enfoque nulo, luego encasillarlo cuando use la variable en el contexto donde tuvo problemas (es decir, pasar (cadena) $ blankVar). Si eso funciona, puede significar que se requieren menos cambios en su código.

'null' es lo único a lo que se refieren las variables sin inicializar. Puede establecer una variable para referirse a nulo. También existe el estado "sin establecer", lo que significa que la variable no existe en absoluto. Puede verificarlo a través de la función isset () . Más a menudo se usa para verificar si un elemento de la matriz existe y es, por ejemplo, una manera de ver si $ _GET ['op'] ha recibido un parámetro de cadena de consulta. También puede desarmar una variable (eliminar un elemento de una matriz) a través de unset () función . También hay una función vacía () que verificará si una variable es NULL, FALSE, 0 o una cadena vacía

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top