Laravel — Blade. Альтернативный метод объявления тернарного оператора и передача функции его результата как.. | PHPClub
JavaScript отключён. Чтобы полноценно использовать наш сайт, включите JavaScript в своём браузере.
- Автор темы Vano
- Дата начала
Vano
Новичок
- #1
PHP:
{{ isset($var) ? $var : 'default' }}и альтернативный способ:
PHP:
{{ $var or 'default' }}Есть проблема. Если такую конструкцию передавать сразу в параметр функции:
PHP:
{{ Form::text('email', $user->email or 'default' ...) }}То в input подставится цифра 1. Если использовать привычный синтаксис,то всё работает исправно.
пробовал положить в скобки
PHP:
... ($user->email or 'default') ...тот же результат
Есть возможность это поправить?
WMix
герр M:)ller
- #2
PHP:
{{--*/ $email =isset($user->email) ? $user->email : 'default' /*--}} {{ Form::text('email', $email . ..) }}
Vano
Новичок
- #3
Хз уж лучше, мне кажется, просто иссет запихнуть в параметр. Но всё равно спасибо.
А еще вопрос: Я тут потестил, если создавать инпуты через Form хелпер и в контроллере отдавать ->withInput() — то в value инпутов подставляются old(‘%attribute%’). Эт правда? Кто-нить знает на 100%?
Vano
Новичок
- #4
Ну на 95% хотяб))
AmdY
Пью пиво
- #5
не используй or, это очередной кривой костыль реализованный через сидельное место, так как использует зарезервированный оператор. Если используешь php 7 используй новый ??. А так лучше используй isset без всякой магии
Vano
Новичок
- #6
Понял. Спасибо за совет.
Войдите или зарегистрируйтесь для ответа.
Поделиться:Facebook Twitter WhatsApp Ссылка
Pine Script.
Тернарный оператор или оператор условия — ПрочееБольшинству операторов TradingView требуется два операнда, иногда один, но есть и такие, которым нужно 3 операнда. К ним относится условный тернарный оператор (тернарный значит тройной).
Условный оператор (?:) оценивает условие и возвращает одно из двух значений в зависимости от того, является ли это условие истинным или ложным. Он работает как оператор if/else, которого нет в языке Pine Script TradingView.
Тернарный оператор имеет следующий синтаксис:
condition ? result 1 : result 2
condition ? result 1 : result 2 |
Когда его условие condition оценивается как истинное, возвращается result 1, в противном случае возвращается result 2.
Значения result 1 и result 2 должны быть одного и того же типа: целые числа, строка или цвет.
Использовать разные типы не допускается.
Условие condition может быть логическим выражением true/false (например, close > open) или числовым выражением (например, high — high[1]). Во втором случае значения 0, NaN и +Infinity и -Infinity считаются ложными, в то время как другие числовые значения рассматриваются как истинные.
Как определить значения переменной с помощью условного оператора
barcolor(close > ta.ema(close, 9) ? color.blue : color.red)
barcolor(close > ta.ema(close, 9) ? color.blue : color.red) |
В данном случае условный оператор проверяет больше ли close, чем ta.ema(close, 9), если ДА, то в barcolor возвращается синий цвет, если НЕТ, то красный.
Раскрасим график при помощи тернарного оператора
В данном примере раскрасим фон за красными свечами в светло-красный, а за зелеными — в светло-зеленый:
//@version=5 indicator(title=»ternarnii», overlay=true) background = (close > open) ? color.
//@version=5 indicator(title=»ternarnii», overlay=true)
background = (close > open) ? color.new(color.green,70) : color.new(color.red,70) bgcolor(color=background) |
Создадим переменную background (фон), значение которой устанавливается условным оператором. Оценим условие, больше ли цена закрытия, чем цена открытия? Если условие верно, то в переменную background возвращаем значение color.green,70 — зеленый цвет с прозрачностью 70.
Если условие не выполняется, то в переменную background возвращаем значение color.red,70 — красный цвет с прозрачностью 70.
Последний оператор устанавливает фон графика с помощью bgcolor().
Так наш индикатор работает на графике:
Тернарные операторы могут быть вложенными друг в друга, тогда условия проверяются последовательно друг за другом. Самый последний аргумент действует как значение по умолчанию, если ни одно из условий не оценивается как истинное.
Пример вложенного тернарного оператора:
//@version=5 indicator(title=’ternarnii’, overlay=true) arrowPlot = (close > close[1] and close > open) ? 1 : (close < close[1] and close > open) ? -1 : na plotarrow(series=arrowPlot, colordown=color.new(color.red, 35), colorup=color.new(color.lime, 35))
1 2 3 4 5 6 |
//@version=5 indicator(title=’ternarnii’, overlay=true)
arrowPlot = (close > close[1] and close > open) ? 1 : (close < close[1] and close > open) ? -1 : na
plotarrow(series=arrowPlot, colordown=color.new(color.red, 35), colorup=color.new(color.lime, 35)) |
PHP — P27: тернарный оператор. Тернарный оператор — это способ… | by Dino Cajic
Опубликовано в·
Чтение: 3 мин.·
28 июля 2020 г.Тернарный оператор — это способ быстро выразить оператор if/else. Тернарный оператор следует следующему синтаксису:
( логическое выражение ) ? если_истина : если_ложь;
Если логическое выражение оценивается как истинное, отображается результат «if_true», в противном случае отображается результат «if_false».
Напомню, обычный синтаксис if/else выглядит следующим образом:
// оператор do, если true
} else {
// do оператор if false
}?>
Это становится излишним, особенно когда вы просто повторяете операторы. Вам нужно будет написать 2 разных эхо-оператора: один для части , если истина , и другой для части , если ложь . Тернарный оператор можно втиснуть в один оператор echo.
эхо (логическое выражение)? если_истина : если_ложь;
Давайте рассмотрим пример.
= 2000) ? «Время тратить» : «Нужно больше денег»;?>
Поскольку переменная $money содержит 2000, выражение $money ≥ 2000 оценивается как истинное, поэтому на экране отображается «Время тратить». Если значение, хранящееся внутри переменной $money , было меньше 2000, на экране вы увидите сообщение «Нужно больше денег».
Тернарные операторы также отлично подходят, когда вам нужно присвоить значение переменной после принятия какого-либо решения.
= 2000) ? true : false;?>
В операторе выше PHP:
- Присваивает 2000 переменной $money .
- Переход к переменной $isBuyingAMountainBike . Он видит, что содержит тернарный оператор.
- PHP вычисляет выражение, $money ≥ 2000. Выражение возвращает true .
- Поскольку выражение вернуло true, PHP переходит к части «if_true» троичного выражения и видит, что оно содержит значение true .
- Значение true присвоено переменной $isBuyingAMountainBike .
Мы могли бы легко разместить значения Да/Нет или 1/0 вместо истинного/ложного для троичного выражения выше.
Давайте рассмотрим пример, где тернарный оператор действительно начинает сиять. Представьте, что у нас есть переменная $employeeOrCustomer . Мы пишем электронное письмо и, в зависимости от значения переменной, хотим либо напечатать официальное приветствие, либо более непринужденное. Мы собираемся хранить все сообщение внутри переменной $msg . Если бы мы не были знакомы с тернарным оператором, мы могли бы использовать оператор if/else для генерации нашего значения $msg .
Оператор if/else был добавлен для принятия решения. Он пытается выяснить, будет ли он добавлять «чувак» или «сэр / мэм» к Значение $msg . Мы можем добиться того же результата одним оператором благодаря тернарному оператору.
Не следует злоупотреблять тернарным оператором; его следует использовать только в простом принятии решений if/else. Если у вас есть вложенные выражения, вы должны попытаться либо преобразовать вложенное логическое выражение в одно выражение с помощью логических операторов, таких как оператор &&, либо просто использовать структуру if/else.
Тернарный оператор — это то, что вы будете использовать довольно часто на протяжении всей своей карьеры программиста, так что привыкайте к нему. Тебе это понравится.
сравнение — использование тернарного оператора PHP только с двумя аргументами
спросил
Изменено 11 лет, 4 месяца назад
Просмотрено 3к раз
Недавно я просматривал свой код и заметил, что по рассеянности оставил примерно такую структуру:
$guid = пусто($subscription->guid) ? : $подписка->руководство;
Теперь этот не делал то, что должен был делать , и неверен , но поскольку это свойство всегда установлено, теперь оно работало нормально, и с версии 5.3 нет синтаксической ошибки из-за следующего изменения:
Начиная с PHP 5. 3, можно опустить среднюю часть тернарного оператора. Выражение expr1 ?: expr3 возвращает expr1, если expr1 принимает значение TRUE, и expr3 в противном случае.
Я не знал об этом изменении, и теперь мне любопытно, использовать его или нет. Это то, чего мне очень не хватало в таких языках, как ruby, где вы можете сделать, например, a = b || c
, чтобы получить либо b
, либо c
, а не «настоящее» логическое значение. Однако синтаксис, который они выбрали для тернарного оператора, кажется мне немного нелогичным. Должен ли я использовать это в производственном коде? Это определенно бросило меня, когда я увидел это случайно.
- php
- сравнение
- операторы
Тернарный условный оператор без второго аргумента является немного новым, но он похож 1 на оператор объединения с нулевым значением, который можно найти в других производных от Алгола языках, таких как C# и Perl, и, как вы упомянули, || Оператор
в Ruby (и JavaScript).
Сначала это выглядит странно, но это не так уж и сложно (тем более, что есть прецеденты для подобных операторов в других языках) и может сэкономить много нажатий клавиш. И, если что случилось с разделителем пространства имён ( \
) указывает на то, что странный синтаксис в конечном итоге будет принят сообществом PHP.
Но одной из основных проблем, с которыми обычно сталкиваются PHP-приложения, является (иногда) мучительно долгое время между выпуском новой версии PHP и моментом, когда хосты начинают ее поддерживать. Это приводит к проблемам, когда вам необходимо обеспечить обратную совместимость со старыми версиями PHP, отказавшись от таких удобных изменений.
Если вас это не беспокоит, и ваша команда согласна на его использование (или, если вы разработчик-одиночка, если вам это удобно), во что бы то ни стало, сделайте это. Как и разделитель пространства имен, я действительно думаю, что это действительно вопрос того, когда, а не если, это будет приемлемо во всех будущих проектах PHP.
Примечание 1 : Но не идентичны, учитывая, что операторы объединения с нулевым значением проверяют только ненулевые значения (а не истинные значения, такие как PHP), а синтаксис ?:
не подавляет неопределенные уведомления, как вы упомянули в комментарии.
Мне кажется, что это ошибка в коде. Это выглядит неправильно, и в целом я избегаю использования синтаксиса, который выглядит так, как будто вы допустили ошибку, ради экономии нескольких нажатий клавиш. Когда вы (или кто-то другой) вернетесь к чтению кода позже, я думаю, что эта строка сбьет вас с толку и заставит вас потратить время на разбор того, что она делает, для того, что по сути является простой операцией.
1 Ну, PHP имеет логический тип и || Оператор
возвращает логическое значение, поэтому в PHP результат $a || $b
является логическим значением, это согласуется с &&
, так как с &&
нет особого смысла возвращать одно или другое, но имеет смысл возвращать true
/ false
. То, что все булевы операторы возвращают логические значения, тоже звучит вполне логично.
Кроме того, это изобретение не из PHP, а из C, откуда исходят многие элементы дизайна «классического» PHP. Цитата из §6.5.14 C99 стандарт:
|| оператор должен возвращать 1, если любой из его операндов не равен 0; в противном случае возвращается 0. Результат имеет тип int.
И, ну, следует ли вам использовать ?: или нет, нельзя ответить в общей форме, но имейте в виду: лучший способ языка — это использовать конструкции, которые он предоставляет, и использовать парадигмы, которые он предлагает. Нет смысла писать Java-код, как код C, или наоборот 😉
Я думаю, что это очень полезный оператор, и его определенно следует использовать, поскольку стандарт языка явно определяет его.
Обратите внимание, что официально он называется Elvis Operator в Grooy (почему? Просто посмотрите внимательно!), и его предлагалось ввести в Java 7.
Зарегистрируйтесь или войдите в систему
Зарегистрируйтесь с помощью Google Зарегистрироваться через Facebook Зарегистрируйтесь, используя электронную почту и парольОпубликовать как гость
Электронная почтаОбязательно, но не отображается
Опубликовать как гость
Электронная почтаТребуется, но не отображается
Нажимая «Опубликовать свой ответ», вы соглашаетесь с нашими условиями обслуживания и подтверждаете, что прочитали и поняли нашу политику конфиденциальности и кодекс поведения.