2024 年 PHP 日本研討會

print

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

print輸出字串

說明

print(字串 $expression): 整數

輸出 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 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 則註解

31
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"
}
?>
14
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
2
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