Skip to content

echo 与 print

PHP 里最常用的输出方式就是 echoprint。两者都能把内容写到页面或终端,日常开发几乎总是用 echo

先看一段能直接跑的代码,保存为 hello.php 后执行 php hello.php

php
<?php

echo "Hello, PHP\n";
print "Hello again\n";

输出:

Hello, PHP
Hello again

它们是什么

echoprint 都是语言结构(language construct),不是函数。所以:

  • 括号可以省略
  • 不能当普通函数那样取返回值来「组成表达式」(echo 尤其如此)
  • 手册里写成 echoprint,而不是 echo()print()
php
<?php

echo "不带括号\n";
echo("带括号也可以\n");

print "不带括号\n";
print("带括号也可以\n");

echo

echo 用来输出一个或多个字符串,没有返回值

基本用法

php
<?php

echo "PHP Guide";
echo 8;
echo true;   // 输出 1
echo false;  // 什么也不输出

布尔值 true 会被输出成 1false 输出空字符串。需要看清真实类型时,用 var_dump(),不要用 echo

一次输出多项

echo 可以用逗号分隔多个参数,会按顺序拼在一起输出:

php
<?php

$lang = "PHP";
$year = 1995;

echo $lang, " 诞生于 ", $year, " 年\n";

输出:

PHP 诞生于 1995 年

这是 echo 相对 print 最明显的能力:print 只能接收一个参数。

不要给多个参数加括号

下面这种写法会报错,因为加上括号后,PHP 会把它当成「一次函数调用」:

php
<?php

echo("PHP", "Guide"); // 语法错误

多项输出时,不要加括号:

php
<?php

echo "PHP", "Guide";     // 正确
echo ("PHP"), ("Guide"); // 也能跑,但不要这样写

print

print 同样用于输出,但有两点和 echo 不同:

  1. 只能接收一个参数
  2. 总会返回 1,因此可以出现在表达式里
php
<?php

print "只输出一句话\n";

$result = print "这行也会输出\n";
var_dump($result); // int(1)

因为有返回值,下面这种「顺便输出」的写法在语法上合法,实际项目里几乎不会这么用:

php
<?php

$ok = true;
$ok && print "条件成立才输出\n";

echo 没有返回值,不能这样写。

对照表

echoprint
类型语言结构语言结构
参数个数一个或多个只能一个
返回值始终为 1
能否用在表达式中不能
日常推荐一般不需要

性能差异可以忽略。选择哪个,看的是写法和习惯,不是速度。

短回显标签 <?=

在 HTML 模板里输出变量,推荐用短回显标签。它等价于 echo,从 PHP 5.4 起始终可用:

php
<?php
$title = "PHP 基础学习指南";
?>
<!DOCTYPE html>
<html lang="zh-CN">
<head>
  <meta charset="UTF-8">
  <title><?= htmlspecialchars($title, ENT_QUOTES, 'UTF-8') ?></title>
</head>
<body>
  <h1><?= htmlspecialchars($title, ENT_QUOTES, 'UTF-8') ?></h1>
</body>
</html>

注意:把变量输出到 HTML 时,要做转义(上面的 htmlspecialchars),避免 XSS。命令行脚本不必转义。

和 HTML 混写

PHP 文件可以在 HTML 中间插入输出。下面是典型写法:

php
<?php $name = "小明"; ?>
<p>你好,<?= htmlspecialchars($name, ENT_QUOTES, 'UTF-8') ?></p>
<?php if ($name !== ""): ?>
  <p>欢迎回来。</p>
<?php endif; ?>

纯逻辑脚本(没有 HTML)里,用 echo "...\n"echo PHP_EOL 换行即可。

输出变量与字符串

把变量和文字拼在一起,常见有三种方式。

1. 点号拼接

php
<?php

$name = "PHP";
echo "Hello, " . $name . "\n";

单引号字符串不会解析变量,适合输出原样文本:

php
<?php

$name = "PHP";
echo 'Hello, $name\n'; // 原样输出 Hello, $name\n

2. 双引号插值

双引号字符串会解析变量和转义字符:

php
<?php

$name = "PHP";
echo "Hello, $name\n";
echo "Hello, {$name} Guide\n";

变量紧贴其他字符时,用 {$name} 更不容易出错。

3. 逗号传给 echo

php
<?php

$name = "PHP";
echo "Hello, ", $name, "\n";

三种都能用。本指南后续示例以双引号插值和点号拼接为主。

和 var_dump、print_r 的区别

结构 / 函数用途
echo / print把值作为文本输出给用户
var_dump()调试:看类型和值,数组、对象也能看清
print_r()调试:把数组、对象打印得比较可读
php
<?php

$user = ["name" => "小明", "age" => 18];

echo $user;      // 只会输出 Array,看不清内容
print_r($user);  // 可读地打印数组
var_dump($user); // 连类型一起打印

给用户看的内容用 echo;排查问题时用 var_dump()

常见误区

把 echo 的结果赋给变量。 echo 没有返回值,这样写是错的:

php
<?php

$text = echo "hello"; // 语法错误

需要「得到字符串」而不是「立刻输出」时,用拼接或 sprintf()

php
<?php

$text = "hello";
$line = sprintf("你好,%s\n", $text);
echo $line;

在括号里给 echo 传多个参数。 echo("a", "b") 会语法错误,应写成 echo "a", "b"

用 echo 检查空值。 echo false;echo null; 都什么也不显示,看起来像没执行。判断变量请用 isset()empty()var_dump(),详见 内置函数

在 HTML 里直接 echo 用户输入。 未转义的输出可能造成 XSS。页面输出用 htmlspecialchars()

该用哪一个

  • 日常输出:用 echo
  • 模板里输出变量:用 <?= ... ?>
  • 调试复杂数据:用 var_dump()
  • print 能做的,echo 几乎都能做,没有必要特意选 print

练习

  1. 写一个 intro.php,用 echo 输出你的名字和今天想学的内容,各占一行。
  2. 把同一段内容改成 print 输出,确认结果一致。
  3. 用一次 echo、逗号分隔,输出 语言:PHP(其中 PHP 来自变量)。
  4. 新建一个简单 HTML 页面,用 <?= ?> 输出标题。

下一篇:变量定义 — 学会把数据存起来再输出。

基于 VitePress 构建的 PHP 基础学习指南