Работая с 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 );
}
Зачем использовать if if at вообще в $_GET['branch']
если $branch
может быть $_GET['branch']
?
Лучше всего вы можете использовать тернарный оператор, чтобы просто установить ветвь по умолчанию и избежать ошибки.
$branch = (empty($_GET['branch'])) ? DEFAULT_BRANCH : $_GET['branch'];
else
состоянии. Вопрос в том, зачем проверять дважды? Ваш ответ полезен и, вероятно, правильный для большинства людей, которые находят это в Google. Я сделал свою часть в голосовании. В моем конкретном случае, это было то, что это был параметр URL, и поэтому имело смысл как проверить, существует ли он вообще, так и дважды проверить, что значение не было чем-то вроде false
или 0
.
Возможно, существует другой способ, которым ветка получает множество, и ветвь будет установлена позже в коде. Первое, если проверяет, если $ _GET не пуст, btw.
Там нет оснований делать такие проверки таким образом. Как это выглядит немного похоже на такой код:
for ($x=0;$x<2;$x++)
{
if ($x>0)
{
$x=0;
}
}
&branch=0
или&branch=false
, сценарий должен это учитывать.