<?php print "print does not require parentheses."; print PHP_EOL;
// No newline or space is added; the below outputs "helloworld" all on one line print "hello"; print "world"; print PHP_EOL;
print "This string spans multiple lines. The newlines will be output as well"; print PHP_EOL;
print "This string spans\nmultiple lines. The newlines will be\noutput as well."; print PHP_EOL;
// The argument can be any expression which produces a string $foo = "example"; print "foo is $foo"; // foo is example print PHP_EOL;
$fruits = ["lemon", "orange", "banana"]; print implode(" and ", $fruits); // lemon and orange and banana print PHP_EOL;
// Non-string expressions are coerced to string, even if declare(strict_types=1) is used print 6 * 7; // 42 print PHP_EOL;
// Because print has a return value, it can be used in expressions // The following outputs "hello world" if ( print "hello" ) { echo " world"; } print PHP_EOL;
// The following outputs "true" ( 1 === 1 ) ? print 'true' : print 'false'; print PHP_EOL; ?>
Surrounding the argument to print with parentheses will not
raise a syntax error, and produces syntax which looks like a normal
function call. However, this can be misleading, because the parentheses are actually
part of the expression being output, not part of the print
syntax itself.
<?php print "hello"; // outputs "hello"
print("hello"); // also outputs "hello", because ("hello") is a valid expression
print(1 + 2) * 3; // outputs "9"; the parentheses cause 1+2 to be evaluated first, then 3*3 // the print statement sees the whole expression as one argument
if ( print("hello") && false ) { print " - inside if"; } else { print " - inside else"; } // outputs " - inside if" // the expression ("hello") && false is first evaluated, giving false // this is coerced to the empty string "" and printed // the print construct then returns 1, so code in the if block is run ?>
When using print in a larger expression, placing both the
keyword and its argument in parentheses may be necessary to give the intended
result:
<?php if ( (print "hello") && false ) { print " - inside if"; } else { print " - inside else"; } // outputs "hello - inside else" // unlike the previous example, the expression (print "hello") is evaluated first // after outputting "hello", print returns 1 // since 1 && false is false, code in the else block is run
print "hello " && print "world"; // outputs "world1"; print "world" is evaluated first, // then the expression "hello " && 1 is passed to the left-hand print
(print "hello ") && (print "world"); // outputs "hello world"; the parentheses force the print expressions // to be evaluated before the && ?>
Be careful when using print. Since print is a language construct and not a function, the parentheses around the argument is not required. In fact, using parentheses can cause confusion with the syntax of a function and SHOULD be omited.
Most would expect the following behavior: <?php if (print("foo") && print("bar")) { // "foo" and "bar" had been printed } ?>
But since the parenthesis around the argument are not required, they are interpretet as part of the argument. This means that the argument of the first print is
("foo") && print("bar")
and the argument of the second print is just
("bar")
For the expected behavior of the first example, you need to write: <?php if ((print "foo") && (print "bar")) { // "foo" and "bar" had been printed } ?>
I wrote a println function that determines whether a \n or a <br /> should be appended to the line depending on whether it's being executed in a shell or a browser window. People have probably thought of this before but I thought I'd post it anyway - it may help a couple of people.