Ответ 1
Смотрите ответ @Yamiko ниже для решения PHP7 fooobar.com/questions/214759/...
echo (!$test) ? 'hello' : $test;
Или вы можете быть немного более крепким и сделать это
echo isset($test) ? $test : 'hello';
Есть ли в PHP что-то похожее на JavaScript:
alert(test || 'Hello');
Итак, когда test undefined или null, мы увидим Hello, иначе - мы увидим значение теста.
Я пробовал аналогичный синтаксис в PHP, но он, похоже, не работает правильно... Также я не знаю, как решить эту проблему Google.
спасибо
Edit
Я должен добавить, что я хотел использовать его внутри массива:
$arr = array($one || 'one?', $two || 'two?'); //This is wrong
Но действительно, я могу использовать inline '?: 'if выражение здесь также, спасибо.
$arr = array(is_null($one) ? "one?" : $one, is_null($two) ? "two ?" : $two); //OK
Смотрите ответ @Yamiko ниже для решения PHP7 fooobar.com/questions/214759/...
echo (!$test) ? 'hello' : $test;
Или вы можете быть немного более крепким и сделать это
echo isset($test) ? $test : 'hello';
вы можете сделать echo $test?: 'hello';
Это будет отображать $test
если это правда, и 'hello'
противном случае.
Обратите внимание, что он выдаст уведомление или строгую ошибку, если $test
не установлен, но...
Это не должно быть проблемой, так как большинство серверов настроено игнорировать эти ошибки. Большинство фреймворков имеют код, который вызывает эти ошибки.
Редактировать: это классический троичный оператор, но с оставленной средней частью. Доступно с PHP 5.3.
echo $test ? $test : 'hello'; // this is the same
echo $test ?: 'hello'; // as this one
Это только проверяет достоверность первой переменной, а не определяет, является ли она неопределенной, и в этом случае она вызывает ошибку E_NOTICE
. Для последнего, проверьте ответ PHP7 ниже (скоро, надеюсь, выше).
Начиная с PHP 7, вы можете использовать что-то, называемое coalesce operator, который делает именно то, что вы хотите, без E_NOTICE, который срабатывает ?:
.
Чтобы использовать его, вы используете ??
, который будет проверять, установлено ли значение слева, а не null.
$arr = array($one ?? 'one?', $two ?? 'two?');
Я очень удивлен, что это не предлагается в других ответах:
echo isset($test) ? $test : 'hello';
Из документов isset($var)
вернет false, если $var
не существует или для него установлено значение null.
Нулевой оператор объединения с PHP 7 и выше, описанный @Yamiko, является синтаксическим сокращением для вышеупомянутого.
В этом случае:
echo $test ?? 'hello';
Один лайнер. Супер читаемый, работает для обычных переменных, массивов и объектов.
// standard variable string
$result = @$var_str ?: "default";
// missing array element
$result = @$var_arr["missing"] ?: "default";
// missing object member
$result = @$var_obj->missing ?: "default";
Посмотрите это в действии: Php Sandbox Demo
Если вы хотите создать массив таким образом, array_map
предоставляет более сжатый способ сделать это (в зависимости от количества элементов в массиве):
function defined_map($value, $default) {
return (!isset($value) || is_null($value)) ? $default : $value;
// or return $value ? $default : $value;
}
$values = array($one, $two);
$defaults = array('one', 'two');
$values = array_map('defined_map', $values, $defaults);
Просто убедитесь, что вы знаете какие элементы оцениваются до false
, чтобы вы могли применить правильный тест.
Может быть, лучший способ, но это первое, что пришло мне в голову:
echo (!$test) ? "Hello" : $test;
Null является ложным в PHP, поэтому вы можете использовать тройной:
alert($test ? $test : 'Hello');
Edit:
Это также относится к пустой строке, , поскольку тройной использует равенство '===', а не '=='
И пустая или пустая строка неверна, если используется оператор '===' или '=='. Я действительно должен сначала проверить свои ответы.
Ну, расширяя эту нотацию, которую вы указали, вы придумали:
if (test) {
alert(test);
} else {
alert('Hello');
}
Итак, это просто простая if... else. В PHP вы можете сократить простые, если... else конструкции, как нечто, называемое "тройным выражением":
alert($test ? $test : 'Hello');
Очевидно, что в PHP нет эквивалента функции JS alert
, но конструкция одинаков.
alert((test == null || test == undefined)?'hello':test);
У меня недавно была такая же проблема. Вот как я ее решил:
<?php if (empty($row['test'])) {
echo "Not Provided";}
else {
echo $row['test'];}?></h5></span></span>
</div>
Ваше значение в базе данных находится в переменной $test..so, если $test row пуст, echo Not Provided