Тернарный в echo

Redjik

Джедай-мастер
Сейчас баловался с приоритетами операторов и обнаружил.

PHP:
$a = true;
echo 'Hello '.$a?'world':'';
//world

$a = true;
echo 'Hello '.$b = $a?'world':'';
//Hello world
Я понимаю почему во втором случае все хорошо обрабатывается, но не понимаю почему в первом такой фэйл...
 

Redjik

Джедай-мастер
Вурдалак
я именно туда и гляжу, у конкатенции приоритет выше - у присвоения ниже ... с присвоением работает
и таки не понятно почему только world появляется...

то есть если думать логически и идти по ходу выполнения операторов (1ый пример), то сначала конкатенция с чем-то-еще-не-обработанным-парсером => должно показывать Hello, а не world - разве нет?
 

Redjik

Джедай-мастер
И кстати со вторым примером тоже не все ясно, на момент конкатенции $b (немного поменял второй пример для ясности) еще undifined variable
 

Вурдалак

Продвинутый новичок
то есть если думать логически и идти по ходу выполнения операторов (1ый пример), то сначала конкатенция с чем-то-еще-не-обработанным-парсером => должно показывать Hello, а не world - разве нет?
facepalm.jpg. Конкатенация происходит с вполне определённым значением: true.
 

Beavis

Banned
PHP:
$a = true;
echo ('Hello '.$a) ? 'world' : '';
PHP:
$a = true;
var_dump((bool)('Hello '.$a));
что тут не логично?
 

HEm

Сетевой бобер
кажется, что скобки это лишние символы? это только кажется
 
Сверху