В PHP, в чем разница между NULL и установкой строки равной 2 одинарные кавычки - PullRequest
27 голосов
/ 09 марта 2009

Раньше я настраивал такие вещи, когда хотел пустых значений.

$blankVar = '';

Затем, спустя несколько месяцев, я решил, что это выглядит лучше, и у меня было более четкое намерение.

$blankVar = null;

Некоторое время это работало без сбоев, но недавно с подготовленными заявлениями PDO я столкнулся с проблемой. Привязка значения к значению null приводила к сбою запроса, тогда как привязка к значению '' не выполнялась. Мне нужно было привязать его к нулю, чтобы при выполнении условия вставлялись пустые данные.

В чем различия между 2? Я все еще думаю, что равенство нуля (или, по крайней мере, константа) выглядит лучше, так что я должен сделать это?

define('EMPTY', '');

Ответы [ 5 ]

45 голосов
/ 09 марта 2009

Null - это просто еще один тип данных в PHP, который имеет только одно значение (null). Поскольку PHP является языком с типичной неопределенностью, он может сбить с толку то, как он обрабатывает различные значения.

"", 0, "0", False, array(), Null все считаются ложными в PHP.

Но ноль - это другой вид животных. Несовместимость main с использованием Null заключается в том, что вы не можете определить, является ли он isset ().

$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

Так что null странно в том смысле, что он не следует нормальным правилам переменных в PHP (по крайней мере, некоторым). В большинстве случаев это нормально.

Когда дело доходит до столбцов базы данных, в NULL PHP там нет места. Видите ли, SQL - это язык на основе строк. NULL в SQL должен быть представлен NULL без кавычек.

Так что, если вы хотите пустое поле, установите его в ""

INSERT INTO foo SET bar = ""

Но если вы хотите иметь значение NULL, установите его в NULL

INSERT INTO foo SET bar = NULL

БОЛЬШАЯ РАЗНИЦА.

Но если вы попытаетесь вставить PHP NULL напрямую, он добавит нулевой символ в запрос (что оставляет вас с пустой или синтаксической ошибкой, в зависимости от того, цитировали ли вы его).

21 голосов
/ 09 марта 2009

null - это специальное значение-заполнитель в языке программирования, которое буквально означает «ничто». Это не 0, это не пустая строка, это ничто. В памяти нет значения, на которое указывают. Пустая строка, с другой стороны, все еще является строковым объектом, просто очень коротким:)

2 голосов
/ 09 марта 2009

Помимо различий, указанных Рексом, в PHP есть два типа сравнений: свободный и строгий:

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

Если в любом качестве используются строгие сравнения или функции, такие как is_null (), вы получите другие результаты. Однако при слабых сравнениях PHP довольно мягок.

Я точно не знаю, но вы можете использовать свой нулевой подход, а затем просто ввести тип, когда используете переменную в контексте, где у вас возникли проблемы (например, pass (string) $ blankVar). Если это сработает, это может означать, что в ваш код потребуется меньше изменений.

2 голосов
/ 09 марта 2009

Что ж, хорошо выглядит каждый подход, но главное отличие в том, что один - пустая строка, а другой - неинициализированная переменная (нуль)

1 голос
/ 09 марта 2009

'null' - это уникальная вещь, на которую ссылаются неинициализированные переменные. Вы можете установить переменную для ссылки на ноль. Существует также состояние «unset», означающее, что переменная вообще не существует. Вы можете проверить это с помощью функции isset () . Чаще всего используется для проверки того, существует ли элемент массива и является, например, способом узнать, получил ли $ _GET ['op'] параметр строки запроса. Вы также можете сделать переменную unset (удалить элемент массива) с помощью функции unset () . Существует также функция empty () , которая проверяет, является ли переменная NULL, FALSE, 0 или пустой строкой

...