(PHP 4, PHP 5, PHP 7, PHP 8)
print — Выводит строку
Языковая конструкция выводит выражение expression.
print — не функция, а языковая конструкция.
Аргумент языковой конструкции — выражение после ключевого слова print
без круглых скобок.
Основные отличия от конструкции echo состоят в том,
что конструкция print принимает только один аргумент
и при каждом вызове возвращает значение 1.
expression
Выражение, которое требуется вывести. Нестроковые значения преобразуются в строки,
даже если включили директиву
strict_types.
Языковая конструкция всегда возвращает 1.
Пример #1 Примеры использования языковой конструкции print
<?php
print "print не требует скобок.";
print PHP_EOL;
// Новая строка или пробел не добавляются; ниже выводится "приветмир" в одну строку
print "привет";
print "мир";
print PHP_EOL;
print "Эта строка занимает
несколько строк. Новые строки
тоже выводятся";
print PHP_EOL;
print "Эта строка занимает\nнесколько строк. Новые строки\nтоже выводятся";
print PHP_EOL;
// В аргументах разрешается передавать выражения, которые вычисляются как строки
$foo = "пример";
print "foo — это $foo"; // foo — это пример
print PHP_EOL;
$fruits = ["лимон", "апельсин", "банан"];
print implode(" и ", $fruits); // лимон и апельсин и банан
print PHP_EOL;
// Нестроковые выражения приводятся к строковым,
// даже при установке строгой проверки типов конструкцией declare(strict_types=1)
print 6 * 7; // 42
print PHP_EOL;
// Конструкция print возвращает значение и поэтому допускается в выражениях
// Следующие выходные данные "привет мир"
if ( print "привет" ) {
echo " мир";
}
print PHP_EOL;
// Следующее выражение выводит "true"
( 1 === 1 ) ? print 'true' : print 'false';
print PHP_EOL;
?>Замечание: Использование с круглыми скобками
Заключение аргумента конструкции
<?php print "привет"; // Выведет "привет" print("привет"); // Тоже выведет "привет", потому что ("привет") — корректное выражение print(1 + 2) * 3; // Выведет "9"; круглые скобки приводят к тому, что сначала вычисляется выражение 1 + 2, а затем выражение 3 * 3; // конструкция print видит всё выражение как один аргумент if (print("привет") && false) { print " — внутри if"; } else { print " — внутри else"; } // Выведет " — внутри if". // Сначала вычисляется выражение ("привет") && false, которое возвращает false, // это приводится к пустой строке "" и выводится. // Затем конструкция print возвращает 1, поэтому выполняется код в блоке if ?>При вызове конструкции
<?php if ((print "привет") && false) { print " — внутри if"; } else { print " — внутри else"; } // Выведет "привет — внутри else". // В отличие от предыдущего примера, выражение (print "привет") вычисляется первым. // После вывода строки "привет" языковая конструкция print возвращает 1, // поскольку выражение 1 && false — ложно, выполняется код в блоке else print "привет " && print "мир"; // Выведет "мир1"; выражение print "мир" выполняется в первую очередь, // тогда выражение "привет" && 1 передается в левую часть print (print "привет ") && (print "мир"); // Выведет "привет мир"; круглые скобки заставляют выражения print // выполнятьтся перед оператором && ?>
Замечание: Конструкцию нельзя вызывать как функцию переменной или передавать как именованный аргумент, поскольку это языковая конструкция, а не функция.
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
}
?>The other major difference with echo is that print returns a value, even it’s always 1.
That might not look like much, but you can use print in another expression. Here are some examples:
<?php
rand(0,1) ? print 'Hello' : print 'goodbye';
print PHP_EOL;
print 'Hello ' and print 'goodbye';
print PHP_EOL;
rand(0,1) or print 'whatever';
?>
Here’s a more serious example:
<?php
function test() {
return !!rand(0,1);
}
test() or print 'failed';
?>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.
<?php
function println ($string_message) {
$_SERVER['SERVER_PROTOCOL'] ? print "$string_message<br />" : print "$string_message\n";
}
?>
Examples:
Running in a browser:
<?php println ("Hello, world!"); ?>
Output: Hello, world!<br />
Running in a shell:
<?php println ("Hello, world!"); ?>
Output: Hello, world!\n