<pre> 标签的两种用法有什么区别?
What's the difference between two usages of <pre> tag?
考虑以下代码:
<?php
function a($txt) {
b("Cleveland");
}
function b($txt) {
var_dump(debug_backtrace());
}
echo '<pre>';
a("Peter");
'</pre>';
?>
输出:
array(2) {
[0]=>
array(4) {
["file"]=>
string(40) "C:\xampp\htdocs\php_playground\hello.php"
["line"]=>
int(6)
["function"]=>
string(1) "b"
["args"]=>
array(1) {
[0]=>
string(9) "Cleveland"
}
}
[1]=>
array(4) {
["file"]=>
string(40) "C:\xampp\htdocs\php_playground\hello.php"
["line"]=>
int(12)
["function"]=>
string(1) "a"
["args"]=>
array(1) {
[0]=>
string(5) "Peter"
}
}
}
现在,考虑下面的代码:
<?php
function a($txt) {
b("Cleveland");
}
function b($txt) {
var_dump(debug_backtrace());
}
echo '<pre>'.a("Peter").'</pre>';
?>
输出:
array(2) { [0]=> array(4) { ["file"]=> string(40) "C:\xampp\htdocs\php_playground\hello.php" ["line"]=> int(3) ["function"]=> string(1) "b" ["args"]=> array(1) { [0]=> string(9) "Cleveland" } } [1]=> array(4) { ["file"]=> string(40) "C:\xampp\htdocs\php_playground\hello.php" ["line"]=> int(8) ["function"]=> string(1) "a" ["args"]=> array(1) { [0]=> string(5) "Peter" } } }
为什么 <pre>
标签的两种不同用法会得到两种不同的输出?
echo '<pre>';
a("Peter");
'</pre>';
和
echo '<pre>'.a("Peter").'</pre>';
我认为我在这两个声明中没有做任何不同。我在做几乎相同的事情,为什么我得到不同的输出?
echo
仅 运行s 一旦完成构建字符串。所以如果你 运行
function a() {
echo 'A';
}
echo 'Hello ' . a();
你最终会得到输出
AHello
这是因为该函数是作为构建回显调用输出的一部分进行评估的。如果函数本身有 echo
语句(或 var_dump
、print_r
等),那么它将首先显示。
有两个选项可以解决这个问题:
1) 将您的函数重构为 return 字符串而不是
function a() {
return 'A';
}
echo 'Hello ' . a();
2) 在单独的回显调用中调用您的函数,使用逗号而不是字符串连接:
function a() {
echo 'A';
}
echo 'Hello ' , a();
在这两种情况下,您最终都会得到正确的输出:
Hello A
特别针对您的问题,您看到的输出是 var_dump
的输出,后跟 <pre></pre>
,它根本不会显示。 (或者实际上,正如现在许多人提到的那样,只是 <pre>
。尽管这不会对行为产生太大影响。)
echo
输出到 STDOUT。 var_dump
输出到 STDOUT
.
echo '<pre>';
a("Peter");
'</pre>';
这个输出<pre>
。
然后它输出 var_dump。
然后它在空中挥动字符串文字 </pre>
,什么也不做。
echo '<pre>'.a("Peter").'</pre>';
这将开始构建字符串。
以<pre>
开头。
然后输出var_dump
的结果,并加入return值a
函数(没有 return
语句)到字符串。
然后它将 </pre>
连接到字符串。
最后它输出字符串(<pre></pre>
)
考虑以下代码:
<?php
function a($txt) {
b("Cleveland");
}
function b($txt) {
var_dump(debug_backtrace());
}
echo '<pre>';
a("Peter");
'</pre>';
?>
输出:
array(2) {
[0]=>
array(4) {
["file"]=>
string(40) "C:\xampp\htdocs\php_playground\hello.php"
["line"]=>
int(6)
["function"]=>
string(1) "b"
["args"]=>
array(1) {
[0]=>
string(9) "Cleveland"
}
}
[1]=>
array(4) {
["file"]=>
string(40) "C:\xampp\htdocs\php_playground\hello.php"
["line"]=>
int(12)
["function"]=>
string(1) "a"
["args"]=>
array(1) {
[0]=>
string(5) "Peter"
}
}
}
现在,考虑下面的代码:
<?php
function a($txt) {
b("Cleveland");
}
function b($txt) {
var_dump(debug_backtrace());
}
echo '<pre>'.a("Peter").'</pre>';
?>
输出:
array(2) { [0]=> array(4) { ["file"]=> string(40) "C:\xampp\htdocs\php_playground\hello.php" ["line"]=> int(3) ["function"]=> string(1) "b" ["args"]=> array(1) { [0]=> string(9) "Cleveland" } } [1]=> array(4) { ["file"]=> string(40) "C:\xampp\htdocs\php_playground\hello.php" ["line"]=> int(8) ["function"]=> string(1) "a" ["args"]=> array(1) { [0]=> string(5) "Peter" } } }
为什么 <pre>
标签的两种不同用法会得到两种不同的输出?
echo '<pre>';
a("Peter");
'</pre>';
和
echo '<pre>'.a("Peter").'</pre>';
我认为我在这两个声明中没有做任何不同。我在做几乎相同的事情,为什么我得到不同的输出?
echo
仅 运行s 一旦完成构建字符串。所以如果你 运行
function a() {
echo 'A';
}
echo 'Hello ' . a();
你最终会得到输出
AHello
这是因为该函数是作为构建回显调用输出的一部分进行评估的。如果函数本身有 echo
语句(或 var_dump
、print_r
等),那么它将首先显示。
有两个选项可以解决这个问题:
1) 将您的函数重构为 return 字符串而不是
function a() {
return 'A';
}
echo 'Hello ' . a();
2) 在单独的回显调用中调用您的函数,使用逗号而不是字符串连接:
function a() {
echo 'A';
}
echo 'Hello ' , a();
在这两种情况下,您最终都会得到正确的输出:
Hello A
特别针对您的问题,您看到的输出是 var_dump
的输出,后跟 <pre></pre>
,它根本不会显示。 (或者实际上,正如现在许多人提到的那样,只是 <pre>
。尽管这不会对行为产生太大影响。)
echo
输出到 STDOUT。 var_dump
输出到 STDOUT
.
echo '<pre>'; a("Peter"); '</pre>';
这个输出<pre>
。
然后它输出 var_dump。
然后它在空中挥动字符串文字 </pre>
,什么也不做。
echo '<pre>'.a("Peter").'</pre>';
这将开始构建字符串。
以<pre>
开头。
然后输出var_dump
的结果,并加入return值a
函数(没有 return
语句)到字符串。
然后它将 </pre>
连接到字符串。
最后它输出字符串(<pre></pre>
)