Тернарный в echo

  • Автор темы Автор темы Redjik
  • Дата начала Дата начала

Redjik

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

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

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

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

то есть если думать логически и идти по ходу выполнения операторов (1ый пример), то сначала конкатенция с чем-то-еще-не-обработанным-парсером => должно показывать Hello, а не world - разве нет?
 
И кстати со вторым примером тоже не все ясно, на момент конкатенции $b (немного поменял второй пример для ясности) еще undifined variable
 
то есть если думать логически и идти по ходу выполнения операторов (1ый пример), то сначала конкатенция с чем-то-еще-не-обработанным-парсером => должно показывать Hello, а не world - разве нет?
facepalm.jpg. Конкатенация происходит с вполне определённым значением: true.
 
PHP:
$a = true;
echo ('Hello '.$a) ? 'world' : '';
PHP:
$a = true;
var_dump((bool)('Hello '.$a));

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