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 不需要括号.";

// 没有添加换行符或空格;下面输出 "helloworld" 全部在一行上
print "hello";
print
"world";

print
"This string spans
multiple lines. The newlines will be
output as well"
;

print
"This string spans\nmultiple lines. The newlines will be\noutput as well.";

// 参数可以是任何产生字符串的表达式
$foo = "example";
print
"foo is $foo"; // foo is example

$fruits = ["lemon", "orange", "banana"];
print
implode(" and ", $fruits); // lemon and orange and banana

// 非字符串表达式被强制转换为字符串,即使使用 declare(strict_types=1)
print 6 * 7; // 42

// 因为 print 有返回值,所以它可以在表达式中使用
// 以下输出 "hello world"
if ( print "hello" ) {
echo
" world";
}

// 以下输出 "true"
( 1 === 1 ) ? print 'true' : print 'false';
?>

注释

注意: 使用括号

用括号包围 print 的参数不会引发语法错误,并且产生看起来像普通函数调用的语法。但是,这可能会造成误解,因为括号实际上是输出表达式的部分,而不是 print 语法本身的一部分。

<?php
print "hello";
// 输出 "hello"

print("hello");
// 也输出 "hello",因为 ("hello") 是一个有效的表达式

print(1 + 2) * 3;
// 输出 "9";括号导致先计算 1+2,然后是 3*3
// print 语句将整个表达式视为一个参数

if ( print("hello") && false ) {
print
" - inside if";
}
else {
print
" - inside else";
}
// 输出 " - inside if"
// 表达式 ("hello") && false 首先计算,得到 false
// 这被强制转换为空字符串 "" 并打印
// 然后 print 结构返回 1,因此运行 if 块中的代码
?>

在更大的表达式中使用 print 时,可能需要将关键字及其参数都放在括号中才能获得预期结果

<?php
if ( (print "hello") && false ) {
print
" - inside if";
}
else {
print
" - inside else";
}
// 输出 "hello - inside else"
// 与上一个示例不同,表达式 (print "hello") 首先计算
// 输出 "hello" 后,print 返回 1
// 由于 1 && false 为 false,因此运行 else 块中的代码

print "hello " && print "world";
// 输出 "world1";首先计算 print "world",
// 然后表达式 "hello " && 1 传递给左边的 print

(print "hello ") && (print "world");
// 输出 "hello world";括号强制 print 表达式
// 在 && 之前计算
?>

注意: 由于这是一个语言结构而不是函数,因此它不能使用 变量函数命名参数 来调用。

参见

添加注释

用户贡献的注释 3 个注释

user at example dot net
15 年前
使用 print 时要小心。由于 print 是语言结构而不是函数,因此不需要参数周围的括号。
实际上,使用括号会导致与函数语法的混淆,应该省略。

大多数人会期望以下行为
<?php
if (print("foo") && print("bar")) {
// "foo" 和 "bar" 已经打印
}
?>

但由于参数周围的括号不是必需的,因此它们被解释为参数的一部分。
这意味着第一个 print 的参数是

("foo") && print("bar")

而第二个 print 的参数只是

("bar")

为了获得第一个示例的预期行为,您需要编写以下内容
<?php
if ((print "foo") && (print "bar")) {
// "foo" 和 "bar" 已经打印
}
?>
danielxmorris @ gmail dotcom
16 年前
我写了一个 println 函数,它根据执行环境是 shell 还是浏览器窗口,来判断在行尾添加 \n 还是 <br />。也许其他人以前就想到过这个方法,但我还是想分享一下,也许能帮到一些人。

<?php
function println ($string_message) {
$_SERVER['SERVER_PROTOCOL'] ? print "$string_message<br />" : print "$string_message\n";
}
?>

示例

在浏览器中运行

<?php println ("Hello, world!"); ?>
输出: Hello, world!<br />

在 shell 中运行

<?php println ("Hello, world!"); ?>
输出: Hello, world!\n
mark at manngo dot net
11 个月前
与 echo 的另一个主要区别是 print 会返回一个值,即使它总是 1。

这可能看起来并不重要,但你可以将 print 用在另一个表达式中。以下是一些例子

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

这里有一个更严肃的例子

<?php
function test() {
return !!
rand(0,1);
}
test() or print 'failed';
?>
To Top