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

Работая с 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 );
}

0

Решение

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

Это проверяет на «не ложность».
Можно приравнять это к:

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

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

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

0

Другие решения

Он не проверяет, является ли эта переменная пустой. $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'];
7

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

Нет причин делать такие проверки таким образом. Вот так это выглядит примерно так:

for ($x=0;$x<2;$x++)
{
if ($x>0)
{
$x=0;
}
}
0
По вопросам рекламы [email protected]