PHP 8.4.1 Released!

print

(PHP 4, PHP 5, PHP 7, PHP 8)

printВыводит строку

Описание

print(string $expression): int

Языковая конструкция выводит выражение expression.

print — не функция, а языковая конструкция. Аргумент языковой конструкции — выражение после ключевого слова print без круглых скобок.

Основные отличия от конструкции echo состоят в том, что конструкция print принимает только один аргумент и при каждом вызове возвращает значение 1.

Список параметров

expression

Выражение, которое требуется вывести. Нестроковые значения преобразуются в строки, даже если включили директиву strict_types.

Возвращаемые значения

Языковая конструкция всегда возвращает 1.

Примеры

Пример #1 Примеры использования языковой конструкции print

<?php

print "print не требует скобок.";

// Новая строка или пробел не добавляются; ниже выводит «приветмир» в одну строку
print "привет";
print
"мир";

print
"Эта строка занимает
несколько строк. Новые строки
также будут выведены"
;

print
"Эта строка занимает\nнесколько строк. Новые строки\nтакже будут выведены";

// Аргументом может быть любое выражение, производящее строку
$foo = "пример";
print
"foo — это $foo"; // foo — это пример

$fruits = ["лимон", "апельсин", "банан"];
print
implode(" и ", $fruits); // лимон и апельсин и банан

// Нестроковые выражения приводятся к строковым, даже если установлено declare(strict_types=1)
print 6 * 7; // 42

// Поскольку у конструкции print есть возвращаемое значение, её разрешено вызвать в выражениях
// Следующие выходные данные «привет мир»
if ( print "привет" ) {
echo
" мир";
}

// следующее выражение выведет «true»
( 1 === 1 ) ? print 'true' : print 'false';
?>

Примечания

Замечание: Использование с круглыми скобками

Заключение аргумента конструкции print в круглые скобки не вызовет синтаксической ошибки и создаст синтаксис, который выглядит как обычный вызов функции. Однако это вводит в заблуждение, поскольку круглые скобки — часть выводимого выражения, а не часть самого синтаксиса print.

<?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

?>

При вызове конструкции print в более крупном выражении иногда требуется взять ключевое слово и его аргумент в круглые скобки, чтобы получить правильный результат:

<?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
// выполнятьтся перед оператором &&

?>

Замечание: Поскольку это языковая конструкция, а не функция, её нельзя вызывать как функцию переменной или передавать как именованный аргумент.

Смотрите также

Добавить

Примечания пользователей 3 notes

up
31
user at example dot net
16 years ago
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
}
?>
up
14
danielxmorris @ gmail dotcom
16 years ago
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
up
2
mark at manngo dot net
1 year ago
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';
?>
To Top