Работая с 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 );
}
Так empty()
это больше, чем просто обратное isset()
.
Это проверяет на «не ложность».
Можно приравнять это к:
if (!isset($var) || $var == false)
Примечательно, что он проверяет с динамическое преобразование типов. Что в вашем примере, вероятно, имеет смысл, например, пустая строка или "0"
, или даже "0 sheep"
может не сделать полезные имена веток.
Так что это часто вполне подходит для ввода формы и объясняет использование после isset
проверять. Однако другой распространенной идиомой является strlen()
или даже strlen(trim($var))
для тестирования настоящего входного текста.
Он не проверяет, является ли эта переменная пустой. $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'];
Может существовать другой способ, которым ветвь устанавливается и ветвь будет установлена позже в коде. Первый if проверяет, не является ли $ _GET пустым, кстати.
Нет причин делать такие проверки таким образом. Вот так это выглядит примерно так:
for ($x=0;$x<2;$x++)
{
if ($x>0)
{
$x=0;
}
}