2014-11-10 3 views
0

Работа с PHP некоторый код, и я наткнулся на некоторый код, который в основном проверяет, если та же переменная пуста дважды:

if (!empty($_GET[ 'branch' ])) { 
    $branch = $_GET[ 'branch' ]; 
} 
if (empty($branch)) { 
    _output('Error: no branch specified!'); 
    exit(1); 
} 

Любая идея, почему она настроена таким образом? Что такое преимущество над просто используя else, как это:

if (!empty($_GET[ 'branch' ])) { 
    $branch = $_GET[ 'branch' ]; 
} else { 
    _output('Error: no branch specified!'); 
    exit(1); 
} 
+3

Существует, скорее всего, другой способ, которым ветвь получает множество. Первое, если будет установлено значение 'get', но я бы установил, что есть другой способ, которым он тоже может быть установлен. то окончательный, если бы был там, так что если ни один способ не работал – Chausser

+0

@justinhoward: Или перед этими утверждениями. –

+1

'empty()' проверяет наличие булевых пустот. Просто потому, что присутствовало входное значение, это не значит, что оно не было «0». – mario

ответ

0

Так empty() больше, чем просто инверсия isset().

Он проверяет «не-фальшь».
Можно приравнять его:

if (!isset($var) || $var == false) 

В частности он проверяет dynamic type conversion. Что в вашем примере, вероятно, имеет смысл, поскольку такие вещи, как пустая строка, или "0", или даже "0 sheep", могут не создавать полезные имена ветвей.

Так что это часто очень удобно для ввода формы и объясняет использование после проверки isset. Другим распространенным идиомом является, однако, strlen() или даже strlen(trim($var)) для тестирования существующего текста ввода.

+0

Это параметр URL, поэтому, если кто-то делает '& branch = 0' или' & branch = false', скрипт должен учитывать это. – brentonstrine

7

Это не проверка, если та же переменная пуста. $branch не обязательно $_GET['branch'] в этом коде и первая проверка должна проверить, $_GET['branch']не пустой.

По всему коду есть, по крайней мере, еще одно условие, которое устанавливается $branch. Это, скорее всего, последнее условие, поэтому он окончательно проверяет, было ли установлено $branch. Там могут быть более эффективные способы решить эту проблему, но, не видя всего кода, я не мог сказать вам.


Основываясь на ваш комментарий ниже, это то же самое, и даже более просто:

$branch = $_GET[ 'branch' ]; 
if (empty($branch)) { 
    _output('Error: no branch specified!'); 
    exit(1); 
} 

Зачем использовать, если вообще на $_GET['branch'] если $branch может быть только $_GET['branch']?

Лучше еще вы можете использовать тернарный оператор, чтобы просто установить ветвь по умолчанию и избежать возможной ошибки.

$branch = (empty($_GET['branch'])) ? DEFAULT_BRANCH : $_GET['branch']; 
+0

Проверяя, что он * не * пуст, тот же, что и проверка того, что он * пуст, просто отрицается или помещается в условие 'else'. Реальный вопрос: зачем дважды проверять? Ваш ответ полезен и, вероятно, правильный для большинства людей, которые находят это в Google. Я сделал свою часть в повышении. В моем конкретном случае это был параметр URL-адреса, и поэтому имело смысл как проверить, существовало ли оно вообще, а затем дважды проверить, что это значение не было чем-то вроде «false» или «0». – brentonstrine

+0

@brentonstrine Если у вас есть только одно условие, чтобы установить $ ветку, то вторая проверка избыточна, потому что в этом случае $ ветка всегда будет $ _GET ['branch'], или скрипт завершится с ошибкой. Я добавил в свой комментарий о вашем комментарии. Нет смысла запускать if if (или if on $ _GET ['branch']), если есть только один способ $ branch. – Devon

0

Возможно, существует другой способ, которым ветка получает множество, и ветвь будет установлена ​​позже в коде. Первое, если проверяет, если $ _GET не пуст, btw.

Нет никаких оснований делать такие проверки таким образом. Как это выглядит немного как код так:

for ($x=0;$x<2;$x++) 
    { 
    if ($x>0) 
    { 
     $x=0; 
    } 
    }