С Новым годом! Форум программистов, компьютерный форум, киберфорум
PHP для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.76/25: Рейтинг темы: голосов - 25, средняя оценка - 4.76
31 / 46 / 19
Регистрация: 18.07.2018
Сообщений: 578

Альтернативный синтаксис

01.02.2019, 18:47. Показов 4801. Ответов 13
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте!
PHP
1
$var ?? null
PHP
1
$var ?: null
Это одинаковые условия?
Спасибо.
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
01.02.2019, 18:47
Ответы с готовыми решениями:

Альтернативный синтаксис
<? function view($name, $email, $message){?> <h1>Оставить комментарий</h1> <form method="post"> ...

Альтернативный синтаксис
Смотрите, вот есть некий стандарт вывода данных из массива: <ul> <?php foreach ($array as $key => $val) { ?> <li>Ключу...

Альтернативный синтаксис if.else
Подскажите какой с двух примеров является более правильным? <?php $fro=4; if($fro==4){?> <h1>hello is</h1> <?php...

13
Эксперт PHP
4925 / 3920 / 1620
Регистрация: 24.04.2014
Сообщений: 11,441
01.02.2019, 18:58
Начиная с версии PHP 5.3 также стало возможным не писать среднюю часть тернарного оператора. Выражение expr1 ?: expr3 возвращает expr1 если expr1 имеет значение true и expr3 в противном случае.
https://secure.php.net/manual/... on.ternary
Выражение (expr1) ?? (expr2) вычисляется так: expr2, если expr1 равен null и expr1 в противном случае.
На практике, этот оператор не вызывает предупреждения, если левый операнд не существует, как и isset()
https://secure.php.net/manual/... n.coalesce
1
31 / 46 / 19
Регистрация: 18.07.2018
Сообщений: 578
01.02.2019, 19:05  [ТС]
Jewbacabra, в случае с ?: нужно $var проверять, ну например, isset(), но во втором c ?? такой проверки не потребуется, так как предупреждения не будет, я правильно понимаю?
0
Эксперт PHP
4925 / 3920 / 1620
Регистрация: 24.04.2014
Сообщений: 11,441
01.02.2019, 19:11
Лучший ответ Сообщение было отмечено Сынок как решение

Решение

Сынок,
если переменная $var не определена, то оператор ?: бросит варнинг, ?? нет
?? вернет значение второго операнда только если первый строго null, сокращенный тернарный все что можно привести к false
1
31 / 46 / 19
Регистрация: 18.07.2018
Сообщений: 578
01.02.2019, 19:14  [ТС]
Цитата Сообщение от Jewbacabra Посмотреть сообщение
если первый строго null
понял Вас, благодарю
0
31 / 46 / 19
Регистрация: 18.07.2018
Сообщений: 578
06.02.2019, 06:36  [ТС]
Jewbacabra, а как можно конструкцию вида
Code
1
if () {} elseif () {} else {}
записать альтернативным синтаксисом?
0
 Аватар для Пифагор
2172 / 1655 / 840
Регистрация: 10.01.2015
Сообщений: 5,207
06.02.2019, 07:34
Лучший ответ Сообщение было отмечено Сынок как решение

Решение

Цитата Сообщение от Сынок Посмотреть сообщение
if () {} elseif () {} else {}
записать альтернативным синтаксисом?
PHP
1
2
$a = 1;
echo ($a == 1) ? '1' : (($a == 2) ? '2' : 'другое значение');
Только это скорее не альтернативный синтаксис, а расширенный тернарный оператор.
0
31 / 46 / 19
Регистрация: 18.07.2018
Сообщений: 578
06.02.2019, 07:58  [ТС]
Пифагор, у меня 3 цвета и я внедряю условие в тег, значит у меня тогда будет:

HTML5
1
<div class="text-<?= ($color = 'red') ? 'danger' : (($color == 'grey') ? 'secondary' : 'success')  ?>">Текст</div>
тут скобки нужно обязательно соблюсти?

а то я иногда просто пишу

HTML5
1
<div class="text-<?= $color = 'red' ? 'danger' : 'success'  ?>">Текст</div>
0
 Аватар для Пифагор
2172 / 1655 / 840
Регистрация: 10.01.2015
Сообщений: 5,207
06.02.2019, 16:54
Лучший ответ Сообщение было отмечено Сынок как решение

Решение

Цитата Сообщение от Сынок Посмотреть сообщение
тут скобки нужно обязательно соблюсти?
Собственно, можно написать так:
PHP
1
2
$a = 2;
echo $a == 1 ? '1' : ($a == 2 ? '2' : 'другое значение');
но скобки в правом выражении обязательны.

Вот небольшое пояснение, почему:
Кликните здесь для просмотра всего текста

PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
$code = 0;
 
  // следующий код на первый взгляд должен выводить 'Успешно'
  // однако, он выведет 'Предупреждение'
  // происходит это потому что тернарное выражение вычисляется слева направо
 
  $msg = ($code == 0) ? 'Успешно' : ($code == 1) ? 'Предупреждение' : 'Ошибка';
 
  // разберем почему так происходит
  // ($code == 0 ? 'Успешно' : $code == 1 ) ? 'Предупреждение' : 'Ошибка';
 
 
  // первое выражение (то что выделено скобками) возвращает строку 'Успешно', 
  // далее эта строка преобразуется в булево значение - true и вычисляется второе выражение
  // т.е. вычисляется уже (true) ? 'Предупреждение' : 'Ошибка';
  // таким образом возвращается значение 'Предупреждение' второго (вложенного) выражения
 
  echo $msg;
   
  // чтобы предыдущий код работал корректно, нужно пользоваться скобками
  // перепишем пример так, чтобы работал как задумано
  $msg = ($code == 0) ? 'Успешно' : (($code == 1) ? 'Предупреждение' : 'Ошибка');
   
  echo "<br>$msg";
0
31 / 46 / 19
Регистрация: 18.07.2018
Сообщений: 578
06.02.2019, 16:59  [ТС]
Цитата Сообщение от Пифагор Посмотреть сообщение
пояснение
благодарю за методичку, а то иногда приходится методом тыка скобки подбирать, чтобы работало
0
 Аватар для Пифагор
2172 / 1655 / 840
Регистрация: 10.01.2015
Сообщений: 5,207
06.02.2019, 17:03
Сынок, кстати вот тут, похоже, ошибка.
PHP/HTML
1
<div class="text-<?= $color = 'red' ? 'danger' : 'success'  ?>">Текст</div>
Вы же сравниваете значение, а не присваиваете. $color = 'red заменить на $color == 'red
0
31 / 46 / 19
Регистрация: 18.07.2018
Сообщений: 578
06.02.2019, 17:06  [ТС]
Цитата Сообщение от Пифагор Посмотреть сообщение
заменить
опечатка, это уж точно я знаю, когда присвоение или сранение
0
 Аватар для Пифагор
2172 / 1655 / 840
Регистрация: 10.01.2015
Сообщений: 5,207
06.02.2019, 17:08
Цитата Сообщение от Сынок Посмотреть сообщение
присвоение
Правильнее говорить "присваивание" (а может и нет...)
0
31 / 46 / 19
Регистрация: 18.07.2018
Сообщений: 578
06.02.2019, 17:18  [ТС]
Цитата Сообщение от Пифагор Посмотреть сообщение
присваивание
угу :black_eye.:
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
06.02.2019, 17:18
Помогаю со студенческими работами здесь

Альтернативный синтаксис
Здравствуйте. {% if customsetting_customtext %}{{ customsetting_customtext }}{% endif %} Можете пояснить пожалуйста этот фрагмент...

Подскажите альтернативный синтаксис цикла FOR
можно примерчик как использовать его? for (expr1; expr2; expr3): statement ... endfor;

Альтернативный синтаксис foreach создаёт лишний пробел
Между пунктами меню появляется пробел. Но если написать всё в одну строку то всё становится нормально. Как это обойти? Код: ...

Подскажите альтернативный способ объединения между запросами
Сделан поиск сразу по трём таблицам на одном хостинге работал, а на другом не хочет работать. Подскажите пожалуйста альтернативный способ...

Указатели на функцию - альтернативный синтаксис
Если я записываю указатель на функцию принимающую в качестве аргумента тип int и возвращающую значение типа int, вот в такой форме: ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
14
Ответ Создать тему
Новые блоги и статьи
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост.
Programma_Boinc 28.12.2025
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост. Налог на собак: https:/ / **********/ gallery/ V06K53e Финансовый отчет в Excel: https:/ / **********/ gallery/ bKBkQFf Пост отсюда. . .
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США.
Programma_Boinc 26.12.2025
Нашел на реддите интересную статью под названием Anyone know where to get a free Desktop or Laptop? Ниже её машинный перевод. После долгих разбирательств я наконец-то вернула себе. . .
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка.
Programma_Boinc 23.12.2025
Рецензия / Мнение/ Перевод Нашел на реддите интересную статью под названием The Thinkpad X220 Tablet is the best budget school laptop period . Ниже её машинный перевод. Thinkpad X220 Tablet —. . .
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru