isset($var) or ($var)

trompert

Guest
isset($var) or ($var)

Почему говорят, что лучше исползовать
if (isset($var)) чем if($var) ?
Ведь и так и так работает...
 

Demiurg

Guest
1.поставь error_reporting (E_ALL ); в начале скрипта, узнаешь.
2.это две разные проверки.
 

Georgy

Guest
не лучше.

isset() - проверка на существование переменной,
просто if($var) - проверка на не false

если у тебя будет php с выводом всех ошибок E_ALL и $var будет не определена - php тебе выдаст нотацию.

вообще я делаю так:

PHP:
if (isset($var)) {
  if ($var == 1) {
   //...
  }
  else {
   //...
  }
}
esle {
  //...
}
 

_RVK_

Новичок
$var=0;

if ($var) print $var; else print "Переменная не определена<br>";
if (isset($var)) print $var; else print "Переменная не определена<br>";

Получишь:
Переменная не определена
0

Понятно?
 

ForJest

- свежая кровь
Для начала как уже упоминалось разница состоит в том что
PHP:
<?php
error_reporting(E_ALL);
unset($var);
$test = $var;
var_dump($test);
?>
и
PHP:
<?php
error_reporting(E_ALL^E_NOTICE);
unset($var);
$test = $var;
var_dump($test);
?>
первый случай выдает warning.

Как видно, если переменная неопределена, то вместо её значения используется NULL. Выдача warning может привести к проблемам описанным в [f]headers[/f]. Но это не значит что нужно писать скрипты с отключенным E_NOTICE.
Посмотрим почему работает и та и другая конструкция. Все дело в приведении типов.
PHP:
<?
$test = intval(NULL);

echo "Int: ";
var_dump($test);
echo "<br>";

$test = strval(NULL);

echo "String: ";
var_dump($test);
echo "<br>";

$test = (bool)(NULL);//функции для bool нету.

echo "Bool: ";
var_dump($test);
echo "<br>";

?>
В случае с if происходит приведение NULL в тип bool. Как и ожидалось приводит он его к значению false.
За счет приведения типов мы получаем также либо пустую строку либо 0. Что довольно часто используется в скриптах, написанных с использованием error_reporting(E_ALL^E_NOTICE).
Современным стилем является разработка скриптов с установкой error_reporting(E_ALL), что накладывает определенные обязанности на разработчика, но в то же время позволяет избежать появления багов,
 

Yurik

/dev/null
Переменные с форм нужно проверять т.к. по разным причинам они могут быть не определенными и поэтому выдавать ворнинг или нотайс.
Каждый раз писать if (isset($var)) тоже напряжно, к тому же это не одно и то же (Например для проверки ввода строки нужно писать два условия
PHP:
if (isset($var)) {
 if (!empty($var)){
.... process
 }
}
)
поэтому очень распространенный третий случай
PHP:
if (@$var) .. process
 

tony2001

TeaM PHPClub
>if (isset($var)) {
>if (!empty($var)){
вторая строка дублирует первую, проверяя еще и на пустоту.
поэтому две таких проверки бессмысленны.
 

ForJest

- свежая кровь
В твоем случае достаточно !empty($var);
PHP:
<?php
error_reporting(E_ALL);
unset($var);
if (!empty($var))
{
    echo "bla bla";
}
?>
Почитай внимательно про [m]empty[/m].
Если внимательно прочитать, в том числе и ссылку converting to boolean то можно понять, что данная конструкция эквивалентна
PHP:
if (@(bool)$var)
{
     echo "bla bla";
}
 
Сверху