Синтаксис кода PHP - PullRequest
       1

Синтаксис кода PHP

0 голосов
/ 07 января 2011

Я пытаюсь вставить inline, если внутри оператора print в PHP, но я не могу найти правильный синтаксис.

Я пытаюсь сделать что-то вроде этого:

$a = 1;
$b = 1;
print('pretext ' .($a == $b) ? 'texta' : 'textb'. ' posttext');

Но он просто печатает texta, когда должен печатать pretext texta posttext

Ответы [ 4 ]

3 голосов
/ 07 января 2011

Ваш код фактически означает

print('pretext ' . ($a == $b) ? 'texta' : 'textbposttext');

Вы можете сделать

print('pretext ' . (($a == $b) ? 'texta' : 'textb') . ' posttext');

Но почему бы не использовать printf для улучшения читаемости

printf(
    'pretext %s posttext',
    $a == $b ? 'texta' : 'textb'
);

или не объединять и отправлять напрямую на стандартный вывод

echo 'pretext ',
     $a == $b ? 'texta ' : 'textb ',
     'posttext';
3 голосов
/ 07 января 2011
print('pretext ' . (($a == $b) ? 'texta' : 'textb') . ' posttext');
2 голосов
/ 07 января 2011

Другие ответы здесь решают вашу проблему, поэтому я предложу объяснение, почему ваш код не работает.

Проблема с вашим текущим кодом заключается в предполагаемом порядке выполнения. Это оценивается так:

print ('pretext ' .($a == $b)) ? 'texta' : ('textb'. ' posttext')

Вы можете видеть, что 'pretext' объединяется с логическим значением (которое при строковом значении либо 1 или пусто), а затем проверяется. Поскольку непустые строки всегда имеют значение true (из-за 'pretext'), вы получите 'texta'. Также обратите внимание, что последние две строки объединяются как часть выражения после :.

2 голосов
/ 07 января 2011

Попробуйте

$a = 1;
$b = 1;
print('pretext ' . (($a == $b) ? 'texta' : 'textb' ) . ' posttext');
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...