empty or isset?

proWoke

Новичок
empty or isset?

Функция empty ничем не отличается же от isset? Они одинаковы же? Если они одинаковы то зачем их 2? ПОмагите разобраться то, я знаю вы тут умные все:).
 

tz-lom

Продвинутый новичок
нет,они не одинаковые
PHP:
$a = 0;
var_dump(empty($a),isset($a));

>>bool(true)
>>bool(true)
isset потому что переменная объявленна
empty потому что несмотря на то что она объявлена она считается пустым значением (грубо говоря при приведении к булевому типу получится false , залезь в доку и почитай какие значения считаются пустыми )
 

proWoke

Новичок
могу кинуть мануал с сайта, русскоязычный мануал. Так там написанно одно и тоже на них.
 

fixxxer

К.О.
Партнер клуба
Надо читать официальный мануал на php.net а не всякую чушь.
 

proWoke

Новичок
Надо, только вот знания английского пока не тянут на официальный мануал. Но я работают над этим. Всем спасибо.
 

FRIE

Новичок
isset - проверяет существование переменной а empty проверяет на пустоту
 

antson

Новичок
Партнер клуба
proWoke
при включенном error_reporting (E_ALL) твой вопрос не возник бы .

В скриптах времен php3 и register globals on очень часто
empty использовали вместо isset, но это грязный код
и главное он медленнее работает.

Правильно .
1.Инициализировать все переменные дефолтами.
$choto=0; // сопровождать пояснениями
2. проверять существование входных переменных
и заботиться о соответствии типу, допустимым значениям,
безопасности ввода

if(isset($_GET['chtoto'])$choto=intval($_GET['chtoto']);


3. Числовые лучше проверять через сравнение
if($choto>0)

4. empty - оставить для проверки строк на пустоту

5. ИЗБЕГАТЬ построения логики
на манипулирование переменными через unset или факте того, что переменная будет определена только в какой то ветке алгоритма.


6. ЕЩЕ С ПОМОЩЬЮ isset() можно строить кеширование

function vyzyvaetsyMnogoRazSodinakovymyParametrami($x){
static $cache;
if(!isset($cache[$x])){
$value=длительная операции или запрос к субд за значением ;
$cache[$x]=$value;
}
return $cache[$x];
}
 

Dez

Новичок
Недавно тормозил:
делаю просто запрос на страницу(не сабмит) и пытался проверять это
PHP:
if (isset($_POST)) {
} else {
 // тут
}
ан нет, не выполнится. php строит полюбому $_POST, только он пустой.
В этом случае подойдет
PHP:
if (!empty($_POST))
 

newARTix

Новичок
при включенном error_reporting (E_ALL) твой вопрос не возник бы .
почему? Разве empty генерит Notice? :) Постоянно использую ее вместо isset + !is_null или isset + is_numeric + >0 или isset + is_array + count > 0 или isset + !=='', да постоянно.

-~{}~ 17.08.10 13:43:

Кстати что будет если $cache[$x] === null? :) ну про это уже говорили.
 

antson

Новичок
Партнер клуба
newARTix
Сорри, был не прав .
<?php
error_reporting (E_ALL);
if(empty($_GET['vvv'])){ echo 'aaa'; }else{ echo 'bbb'; };

не генерирует ;(
Почему то считал, что будет ошибка.
но по такому принципу, ноль как значение передать невозможно
http://gets.lipetskinfo.loc/1.php?vvv=0
тоже самое, что не установлена
 

korpus

злой бобёр
isset() возвращает FALSE в двух случаях: а) когда переменная не инициализирована, т.е. вообще не существет б) когда переменная равна NULL.
Функция empty() более сложная. Я предпочитаю использовать isset(), а значения переменных проверять на строгое равенство ===, так надёжно.
 
Сверху