echo()
(PHP 4, PHP 5, PHP 7)
输出一个或多个字符串
说明
echo(string $arg1[,string$...] ): void
输出所有参数。不会换行。
echo不是一个函数(它是一个语言结构),因此你不一定要使用小括号来指明参数,单引号,双引号都可以。echo(不像其他语言构造)不表现得像一个函数,所以不能总是使用一个函数的上下文。另外,如果你想给echo传递多个参数,那么就不能使用小括号。
echo也有一个快捷用法,你可以在打开标记前直接用一个等号。在 PHP 5.4.0 之前,必须在php.ini 里面启用short_open_tag才有效。
I have <?=$foo?> foo.
和print最主要的不同之处是,echo接受参数列表,并且没有返回值。
参数
- $arg1
要输出的参数
返回值
没有返回值。
范例
Example #1echo例子
<?php echo "Hello World"; echo "This spans multiple lines. The newlines will be output as well"; echo "This spans\nmultiple lines. The newlines will be\noutput as well."; echo "Escaping characters is done \"Like this\"."; // You can use variables inside of an echo statement $foo = "foobar"; $bar = "barbaz"; echo "foo is $foo"; // foo is foobar // You can also use arrays $baz = array("value" => "foo"); echo "this is {$baz['value']} !"; // this is foo ! // Using single quotes will print the variable name, not the value echo 'foo is $foo'; // foo is $foo // If you are not using any other characters, you can just echo variables echo $foo; // foobar echo $foo,$bar; // foobarbarbaz // Strings can either be passed individually as multiple arguments or // concatenated together and passed as a single argument echo 'This ', 'string ', 'was ', 'made ', 'with multiple parameters.', chr(10); echo 'This ' . 'string ' . 'was ' . 'made ' . 'with concatenation.' . "\n"; echo <<<END This uses the "here document" syntax to output multiple lines with $variable interpolation. Note that the here document terminator must appear on a line with just a semicolon. no extra whitespace! END; // Because echo does not behave like a function, the following code is invalid. ($some_var) ? echo 'true' : echo 'false'; // However, the following examples will work: ($some_var) ? print 'true' : print 'false'; // print is also a construct, but // it behaves like a function, so // it may be used in this context. echo $some_var ? 'true': 'false'; // changing the statement around ?>
注释
TipNote:因为是一个语言构造器而不是一个函数,不能被可变函数调用。
相对echo中拼接字符串而言,传递多个参数比较好,考虑到了 PHP 中连接运算符(“.”)的优先级。传入多个参数,不需要圆括号保证优先级:
<?php echo "Sum: ", 1 + 2; echo "Hello ", isset($name) ? $name : "John Doe", "!";
如果是拼接的,相对于加号和三目元算符,连接运算符(“.”)具有更高优先级。为了正确性,必须使用圆括号:
<?php echo 'Sum: ' . (1 + 2); echo 'Hello ' . (isset($name) ? $name : 'John Doe') . '!';
参见
Passing multiple parameters to echo using commas (',')is not exactly identical to using the concatenation operator ('.'). There are two notable differences. First, concatenation operators have much higher precedence. Referring to http://php.net/operators.precedence, there are many operators with lower precedence than concatenation, so it is a good idea to use the multi-argument form instead of passing concatenated strings. <?php echo "The sum is " . 1 | 2; // output: "2". Parentheses needed. echo "The sum is ", 1 | 2; // output: "The sum is 3". Fine. ?> Second, a slightly confusing phenomenon is that unlike passing arguments to functions, the values are evaluated one by one. <?php function f($arg){ var_dump($arg); return $arg; } echo "Foo" . f("bar") . "Foo"; echo "\n\n"; echo "Foo", f("bar"), "Foo"; ?> The output would be: string(3) "bar"FoobarFoo Foostring(3) "bar" barFoo It would become a confusing bug for a script that uses blocking functions like sleep() as parameters: <?php while(true){ echo "Loop start!\n", sleep(1); } ?> vs <?php while(true){ echo "Loop started!\n" . sleep(1); } ?> With ',' the cursor stops at the beginning every newline, while with '.' the cursor stops after the 0 in the beginning every line (because sleep() returns 0).