echo 用来输出文本。写 echo "Hello"; 输出一个字符串,写 echo "Hello, $name"; 在其中带上变量,写 echo $a, $b; 依次输出多个值。echo 输出的内容,就是浏览器显示的页面,或者你在终端里看到的文字。
第一行用了变量插值(变量直接写在双引号里),第二行用 . 运算符拼接字符串,第三行传入三个用逗号分隔的值。三种写法输出的结果是一样的。
用 echo 输出 HTML
在网页中,echo 通常输出的是 HTML。浏览器收到这段文本后会渲染其中的标签。点击“运行”,“页面”标签页会显示渲染后的结果:
最后一行用了单引号,这样 class="note" 里的双引号就不需要转义。单引号里的变量不会被替换,所以固定文本适合用单引号。如果值来自访问者(表单、URL),要先用 htmlspecialchars 处理再输出,防止被注入 HTML;见 htmlspecialchars 页面。
短 echo 标签 <?=
在 HTML 文件中,<?= $value ?> 是 <?php echo $value; ?> 的简写,能让模板保持简洁易读:
短 echo 标签始终可用。另一种短标签,即不带 php 的 <?,取决于一项配置,不建议使用。
输出多个值和换行
echo 不会自动换行。在终端中,要加上 "\n"(写在双引号里)或常量 PHP_EOL。在 HTML 中,源代码里的换行不会显示出来;要用 <br> 或分开的元素。
逗号和点号的输出结果相同。用逗号时,echo 逐个输出每个值;用点号时,PHP 先拼成一个字符串再输出。换行有单独的页面介绍:PHP 换行。
echo 与 print 的区别
print 是更早的写法。它只输出一个值,并且总是返回 1,因此可以出现在表达式中。echo 可以接受任意多个值,没有返回值。
echo | print | |
|---|---|---|
| 值的个数 | 一个或多个,用逗号分隔 | 只能一个 |
| 返回值 | 无(它是语句) | 1 |
| 能否用在表达式中 | 不能 | 能,$ok = print "x"; |
| 常见用法 | 几乎所有场景 | 很少用 |
printf 又不一样:它用占位符格式化值,例如 printf("%05.2f", 3.14159),详见 sprintf 页面。
输出数组或对象
echo 只能输出字符串,以及能转换成字符串的值(数字、布尔值、null)。数组不能转换。在你自己的 PHP 环境中,会输出一条警告和单词 Array:
PHP Warning: Array to string conversion in /home/index.php on line 3
Array
要显示数组的内容,选用合适的函数:
对象更严格:除非它的类定义了 __toString(),否则 echo $object; 会以 Error: Object of class User could not be converted to string 终止脚本。布尔值也常让人意外:echo true; 输出 1,echo false; 什么也不输出。需要看清确切的类型和值时,用 var_dump($value)。
常见错误:echo 带括号和逗号
因为 echo 看起来像函数,有人会写成 echo("a", "b");。这会产生解析错误,因为括号只能包住一个表达式:
PHP Parse error: syntax error, unexpected token "," in /home/index.php on line 2
去掉括号(echo "a", "b";),或者把值拼接起来(echo("a" . "b");)。print 也是一样,不管加不加括号,它都不接受第二个值。
常见问题
PHP 中 echo 和 print 有什么区别?
两者都用来输出字符串。echo 可以接受多个用逗号分隔的值(echo $a, $b;),没有返回值;print 只接受一个值并返回 1,所以可以用在表达式中。实际开发中几乎都用 echo。
echo 需要加括号吗?
不需要。echo 是语言结构,不是函数,所以 echo "Hi"; 才是常规写法。echo("Hi"); 也能运行,因为括号只是把一个表达式括起来;但 echo("a", "b"); 会产生解析错误。
为什么 echo false 什么都不输出?
echo 会把值转换成字符串,false 变成空字符串 "",而 true 变成 "1"。要看到布尔值本身,用 var_dump($x);(输出 bool(false))或 echo var_export($x, true);(输出 false)。
PHP 中的 <?= 是什么意思?
<?= $value ?> 是短 echo 标签,等同于 <?php echo $value; ?>。从 PHP 5.4 起它始终可用,是在 HTML 模板中输出值的常用方式。