Подтвердить что ты не робот

Если null использовать другую переменную в одной строке в PHP

Есть ли в 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
4b9b3361

Ответ 1

Смотрите ответ @Yamiko ниже для решения PHP7 fooobar.com/questions/214759/...

 echo (!$test) ? 'hello' : $test;

Или вы можете быть немного более крепким и сделать это

echo isset($test) ? $test : 'hello'; 

Ответ 2

вы можете сделать 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 ниже (скоро, надеюсь, выше).

Ответ 3

Начиная с PHP 7, вы можете использовать что-то, называемое coalesce operator, который делает именно то, что вы хотите, без E_NOTICE, который срабатывает ?:.

Чтобы использовать его, вы используете ??, который будет проверять, установлено ли значение слева, а не null.

$arr = array($one ?? 'one?', $two ?? 'two?'); 

Ответ 4

Я очень удивлен, что это не предлагается в других ответах:

echo isset($test) ? $test : 'hello';

Из документов isset($var) вернет false, если $var не существует или для него установлено значение null.

Нулевой оператор объединения с PHP 7 и выше, описанный @Yamiko, является синтаксическим сокращением для вышеупомянутого.

В этом случае:

echo $test ?? 'hello'; 

Ответ 5

Один лайнер. Супер читаемый, работает для обычных переменных, массивов и объектов.

// 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

Ответ 6

Если вы хотите создать массив таким образом, 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, чтобы вы могли применить правильный тест.

Ответ 7

Может быть, лучший способ, но это первое, что пришло мне в голову:

 echo (!$test) ? "Hello" : $test;

Ответ 8

Null является ложным в PHP, поэтому вы можете использовать тройной:

alert($test ? $test : 'Hello');

Edit:

Это также относится к пустой строке, , поскольку тройной использует равенство '===', а не '=='

И пустая или пустая строка неверна, если используется оператор '===' или '=='. Я действительно должен сначала проверить свои ответы.

Ответ 9

Ну, расширяя эту нотацию, которую вы указали, вы придумали:

if (test) {
    alert(test);
} else {
    alert('Hello');
}

Итак, это просто простая if... else. В PHP вы можете сократить простые, если... else конструкции, как нечто, называемое "тройным выражением":

alert($test ? $test : 'Hello');

Очевидно, что в PHP нет эквивалента функции JS alert, но конструкция одинаков.

Ответ 10

alert((test == null || test == undefined)?'hello':test);

Ответ 11

У меня недавно была такая же проблема. Вот как я ее решил:

<?php if (empty($row['test'])) {
                    echo "Not Provided";} 
                        else {
                    echo $row['test'];}?></h5></span></span>
              </div>

Ваше значение в базе данных находится в переменной $test..so, если $test row пуст, echo Not Provided