powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / PHP, Perl, Python [игнор отключен] [закрыт для гостей] / PHP, использование тернарного оператора
7 сообщений из 7, страница 1 из 1
PHP, использование тернарного оператора
    #38927737
Alibek B
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Есть у меня такой код:
Код: php
1.
2.
3.
...
$report .= PHP_EOL . "Файл '$file', период " . ($var['range'] === "range") ? "{$var['range1']} - {$var['range2']}" : $var['period'] . ":" . PHP_EOL;
...



Выводить он должен что-то вроде:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
Протокол обработки.

Файл file1, период 2015-01-01 - 2015-01-05:
- детали 1
- детали 2
- детали 3

Файл file2, период 2015-01-06 - 2015-01-09:
- детали 1
- детали 2
...

Но на самом деле получается примерно такое:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
Протокол обработки.

2015-01-01 - 2015-01-05- детали 1
- детали 2
- детали 3

2015-01-06 - 2015-01-09- детали 1
- детали 2
...

Выглядит так, как будто строка обрабатывается не так:
Код: plaintext
$report .= PHP_EOL . "Файл '$file', период " .  ($var['range'] === "range")  ?  "{$var['range1']} - {$var['range2']}"  :  $var['period']  . ":" . PHP_EOL;
а так
Код: plaintext
$report .=  PHP_EOL . "Файл '$file', период " . ($var['range'] === "range")  ?  "{$var['range1']} - {$var['range2']}"  :  $var['period'] . ":" . PHP_EOL ;
(синим я подчеркнул условие, а зеленым и красным соответственно оба выражения тернарного оператора)

Вроде бы из этого вытекает, что у тернарного оператора приоритет невысокий и он никак не может выполниться прежде чем осуществится конкатенация строк.
Или я что-то не учитываю?

________________________
Мы смотрим с оптимизмом...
...в оптический прицел.
...
Рейтинг: 0 / 0
PHP, использование тернарного оператора
    #38927782
vkle
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
http://php.net/manual/ru/language.operators.precedence.php Используйте скобки, даже если они не обязательны. Чаще всего это повышает читаемость кода, непосредственно определяя порядок группировки, не полагаясь на конкретные приоритет или ассоциативность оператора.
...
Рейтинг: 0 / 0
PHP, использование тернарного оператора
    #38927797
Alibek B
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Это само собой, я скобки поставил и сейчас код уже работает нормально.
Просто хотелось бы понять, почему без скобок не получилось.
Вроде бы должно было.
...
Рейтинг: 0 / 0
PHP, использование тернарного оператора
    #38927812
Фотография r u
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
такое ощущение, Alibek B. просто троллит
...
Рейтинг: 0 / 0
PHP, использование тернарного оператора
    #38927884
Freespy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
авторПросто хотелось бы понять, почему без скобок не получилось.

Ты же сам сказал, что тенарный оператор имеет ниже приоритет, чем точка, поэтому точка выполняется в первую очередь. Как раз у тебя сначала выполнилась точка, потом только ?: То есть в твоём случае строка:

Код: php
1.
$report .= PHP_EOL . "Файл '$file', период " . ($var['range'] === "range") ? "{$var['range1']} - {$var['range2']}" : $var['period'] . ":" . PHP_EOL;


равносильна строке:
Код: php
1.
$report .= (PHP_EOL . "Файл '$file', период ") . (($var['range'] === "range") ? "{$var['range1']} - {$var['range2']}" : ($var['period'] . ":" . PHP_EOL));



А вот если применить такую конструкцию:
Код: php
1.
$a = $b?0:0 or 1;



То вроде бы как по моей логике должен выполниться сначала тенарный оператор и результат $a=1, но на самом деле $a=0, как будто первый выполнился OR. А фокус в том, что даже = выше по приоритету, чем OR:
Код: php
1.
($a = ($b?0:0)) or 1;
...
Рейтинг: 0 / 0
PHP, использование тернарного оператора
    #38927895
Freespy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Нда... Неудачный пример привел, так будет лучше:

Код: php
1.
2.
$b = false;
$a = $b?1:1 and 0; // $a=1, а не false, как ожидалось бы
...
Рейтинг: 0 / 0
PHP, использование тернарного оператора
    #38927942
Alibek B
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Да, что-то меня проглючило с приоритетами.
Я почему-то приоритет понял наоборот.
...
Рейтинг: 0 / 0
7 сообщений из 7, страница 1 из 1
Форумы / PHP, Perl, Python [игнор отключен] [закрыт для гостей] / PHP, использование тернарного оператора
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]