Краткий оператор PHP, чтобы сделать откат переменной до значения по умолчанию [duplicate]

1

Как мы знаем, если мы используем javascript или python, мы можем использовать приведенный ниже оператор, чтобы получить переменную или ее значение по умолчанию.

// javascript
alert(a || 'default');

# python
print(a or 'default');

Хотя в php нам может потребоваться позвонить ниже:

echo $a ? $a : 'default';

И если $ a - очень длинное утверждение, дело еще хуже:

echo (
    we_made_many_calculation_here_and_this_is_the_result() ?
    we_made_many_calculation_here_and_this_is_the_result() :
    'default'
);

или

var $result = we_made_many_calculation_here_and_this_is_the_result();
echo $result ? $result : 'default';

любой из вышеперечисленных, я думаю, что это не опрятно.

И я не знаю, как найти ответ, найти инструкцию или встроенную функцию для упрощения работы. Но, пытаясь найти много способов, я не могу найти ответ.

Так что, пожалуйста, помогите.

  • 1
    echo $result ?: 'default' возможно по echo $result ?: 'default' ?
  • 1
    Начиная с PHP 5.3.0.
Показать ещё 1 комментарий
Теги:
function
syntax

3 ответа

2
Лучший ответ

Относительно этой проблемы: http://php.net/manual/en/language.operators.logical.php#115208

Итак, см. Документацию о тройном операторе, можно использовать:

echo $a ?: 'defaults for a';

Выражение (expr1)? (expr2): (expr3) (expr1)? (expr2): (expr3) вычисляется как expr2, если expr1 имеет значение TRUE и expr3, если expr1 оценивается как FALSE.

Начиная с PHP 5.3, можно исключить среднюю часть тернарного оператора. Expression expr1?: Expr3 возвращает expr1, если expr1 имеет значение TRUE и expr3 в противном случае.


См.: http://www.php.net/manual/en/language.operators.comparison.php#language.operators.comparison.ternary

  • 0
    Но помните, что непустая строка '0' оценивается как ЛОЖЬ!
2

Выполнение $ a, когда $ a не определено, все равно даст вам ошибку. К сожалению, единственный правильный способ сделать это при обработке переменной:

echo isset($a) ? $a: 'default';

При работе с длинной функцией вам все равно нужно проверить условия, которые вы хотите проверить, потому что если он вернет false, вы по-прежнему будете дефолтными.

var $result = we_made_many_calculation_here_and_this_is_the_result(); // false
echo $result ? $result : 'default'; // echos default

Тебе нужно:

var $result = we_made_many_calculation_here_and_this_is_the_result(); 
echo !is_null($result) ? $result : 'default'; 

Это печальное ограничение в том, что php интерпретирует как false. Здесь вы можете увидеть полный список .

  • 0
    Я ищу способ сделать это коротким, а не сделать все правильно. Но спасибо.
  • 0
    В php, я думаю, вы увидите, что больше этих утверждений происходит в отдельных строках, а не в той же строке, в которой вы их повторяете. Вы должны думать и писать свой код немного по-другому в зависимости от языка. PHP не поддерживает так много сокращений, как другие языки.
Показать ещё 1 комментарий
1

Почему бы не попробовать сделать это наоборот, и начать с установки переменной до значения по умолчанию?

$a = "default";
...
echo $a;

Тогда вам не нужно проверять, установлен ли он или нет - просто используйте переменную.

Это имеет дополнительный бонус, а затем предотвращает (к сожалению, очень распространенную и потенциально сложную задачу) проблему использования неназначенной переменной.

  • 0
    Спасибо, но ?: Оператор именно то, что я хочу.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню