Use echo inside php one line if statement

daniel.auener picture daniel.auener · Dec 3, 2013 · Viewed 15.8k times · Source

I use to write one line if statements combined with echo like this:

<?php echo ( true ) ? 'true' : 'false'; ?>

Today I did alter en existing multi line if statement and the echo ended up inside the statement, which gave me a parse error:

<?php ( true ) ? echo 'true' :  echo 'false'; ?>

Using print instead of echo makes it work, though. I figure that it works because print is a function. Update: print is not a function it just behaves like one, which means it has a return value.

<?php ( true ) ? print 'true' :  print 'false'; ?>

What I don't understand is the reason why echo doesn't work. As i understand is the above syntax just a shorthand for a common if statement, so this shouldn't be working either:

if (true) echo 'true'; else echo 'false';

But it does. Someone who knows?

Answer

smassey picture smassey · Dec 3, 2013

As you can read from the PHP documentation:

http://php.net/manual/en/language.operators.comparison.php

The expression (expr1) ? (expr2) : (expr3) evaluates to expr2 if expr1 evaluates to TRUE, and expr3 if expr1 evaluates to FALSE.

The ternary operator expects expressions, which is just a fancy way of saying a value. Echo does not return anything and so has no value meaning it's not an expression.

Print on the other hand, returns something since it's a function, making it a valid expression.