|
|
|
| в чем отличие:
if (empty($var)), if ($var=='')) и if (!$var)?
|
этот вопрос я задавал в теме:
http://www.softtime.ru/forum/read.php?id_forum=1&id_theme=8808&page=3
мне ответил codexomega:
Первое проверяет была ли переменная инициализирована.
Второе проверят значение переменной, равняется ли оно пустой строке.
Третье возвращает boolean (true или false). T.e проверят обратное, перевернутое значение переменной.
но к сожалению этот ответ вызвал у меня еще больше вопросов, а тема к этому времени уже затерялась в форуме, и дискуссия прервалась.
хотелось бы узнать вот что:
1) что значит "переменная инициализирована"? т.е. ей присвоено какое-то значение, будь то строка, число или boolean?
2) есть ли разница между пустой строкой, 0 и false?
<?php
$var=false; // или $var=0;
if ($var=='') { echo "истина"; } else { echo "ложь"; }
?>
|
этот пример в обоих случаях выводит "истина", хотя $var не равно именно *пустой строке*! она равна false в первом случае, и 0 во втором.
тогда в чем отличие между if (empty($var)) и if ($var==''))?
3) то же самое будет если:
<?php
$var=false; // или $var=0; или $var='';
if (!$var) { echo "истина"; } else { echo "ложь"; }
?>
|
во всех 3-х случаях выведется "истина".
тогда в чем отличие между if ($var=='')) и if (!$var))? | |
|
|
|
|
|
|
|
для: irr
(29.10.2005 в 19:23)
| | 1) Это значит что для переменной была выделена память.
2) 3) Разница впринципе есть, только в php она плохо проявляется (но проявляется) из за того что нет привязки к конкретному типу. Интерпретатор сам находит более подходящий тип для переменной (хотя тип можно установить при помощи ф-ии typeof кажется) и производит автоматическое преобразование в зависимости от конкретной операции, т.е. если опреация производится как со строкой (например strlen($var)), то переменная var будет рассматриваться как пустая строка, а если как в вашем случае это логические операции, то переменная будет рассматриваться как типа bool, а вот например в C/С++ это разные вещи которые могут быть присвоены переменным разного типа (например для 0 - int, а для false - bool). | |
|
|
|
|
|
|
|
для: Евгений Петров
(29.10.2005 в 19:38)
| | спасибо за ответ! так все-таки, что получается, в моих примерах нет разницы?
вот например, мне нужно узнать, будет ли пустым запрос в БД или нет.
<?php
$query="SELECT name FROM table";
$result=mysql_query($query);
$var=mysql_num_rows($result);
// что лучше использовать?
if (empty($var)) // или if ($var=='')), или if (!$var)?
{ // ...... }
?>
|
| |
|
|
|
|
|
|
|
для: irr
(29.10.2005 в 21:09)
| | В этом случае лучше использовать логический оператор "не" !.
Если запрос правильный, то по умолчанию результат дает true.
Если нет - то false.
Если не правда - if(!true), значит ложь - false.
Если ваша переменная содержит строку, проверяте ее на пустую строку.
Если число, то на на 0.
Если проверяете была ли выделенна память переменной, например при отправки формы(POST), используйте if(empty($var)).
Логический оператор ! применим в других случаях, или везде, по необходимости.
Это придет, с практикой. | |
|
|
|
|
|
|
|
для: codexomega
(29.10.2005 в 21:15)
| | Если запрос правильный, то по умолчанию результат дает true.
Поправлю вас она возвратит не true а массив. | |
|
|
|
|
|
|
|
для: Евгений Петров
(29.10.2005 в 21:24)
| | mysql_num_rows возвратит false или число | |
|
|
|
|
|
|
|
для: isset
(29.10.2005 в 21:29)
| | Ой я прогнал. Я думал функция не mysql_num_rows а mysql_fetch_row.
Тогда лучше проверять на ноль, т.е.
<?
if(mysql_num_rows($query) == 0)
{
// ...
}
?>
|
| |
|
|
|
|
|
|
|
для: irr
(29.10.2005 в 21:09)
| | В данном случае это не принципиально, но я бы использовал empty или !. Хотя можно и второй вариант т.к. эта функция в случае удачи возвратит ассоциативный массив, т.е. это уже не будет пустой строкой, а вслучае неудачи возвратит false или 0 или если привести к строке - то пустая строка.
P.S. Вобще эта ф-я возвратит false в чем вы легко убедитесь если проверите так:
<?
if($var === 0)
echo "Нету";
else
echo "Есть";
?>
|
Здесь используется строгое сравнение. | |
|
|
|