PHP Conference Japan 2024

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
"此字符串跨越
多行。换行符也将
输出"
;

print
"此字符串跨越\n多行。换行符也将\n输出.";

// 参数可以是任何产生字符串的表达式
$foo = "example";
print
"foo 是 $foo"; // foo 是 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
" - if 内部";
}
else {
print
" - else 内部";
}
// 输出“ - if 内部”
// 首先计算表达式(“hello”)&& false,得到 false
// 这被强制转换为空字符串“”并打印
// 然后 print 结构返回 1,因此运行 if 块中的代码
?>

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

<?php
if ( (print "hello") && false ) {
print
" - if 内部";
}
else {
print
" - else 内部";
}
// 输出“hello - 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
16 年前
使用 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
1 年前
与 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