Зачем проверять, если переменная $ _GET пуста дважды?

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 );
}
Теги:
is-empty

3 ответа

0
Лучший ответ

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

Он проверяет "не-фальшь".
Его можно было бы сопоставить с:

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

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

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

  • 0
    Это был параметр URL, поэтому, если кто-то делает &branch=0 или &branch=false , сценарий должен это учитывать.
7

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

На протяжении всего кода, скорее всего, есть хотя бы одно условие, в котором $branch устанавливается. Это, скорее всего, последнее условие, поэтому он проверяет, наконец, если была задана $branch. Там могут быть более эффективные способы решить эту проблему, но, не видя всего кода, я не мог сказать вам.


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

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

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

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

$branch = (empty($_GET['branch'])) ? DEFAULT_BRANCH : $_GET['branch'];
  • 0
    Ну проверить , что это не пустое то же самое, проверяя , что он пуст, просто отрицается или поместить в else состоянии. Вопрос в том, зачем проверять дважды? Ваш ответ полезен и, вероятно, правильный для большинства людей, которые находят это в Google. Я сделал свою часть в голосовании. В моем конкретном случае, это было то, что это был параметр URL, и поэтому имело смысл как проверить, существует ли он вообще, так и дважды проверить, что значение не было чем-то вроде false или 0 .
  • 0
    @brentonstrine Если у вас есть только одно условие для установки $ branch, тогда вторая проверка является избыточной, потому что в этом случае $ branch всегда будет $ _GET ['branch'] или сценарий завершится ошибкой. Я добавил в редактировании о вашем комментарии. Нет смысла запускать if else (или if в $ _GET ['branch']), если существует только один способ, которым можно установить $ branch.
0

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

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

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

Ещё вопросы

Сообщество Overcoder
Наверх
Меню