Consider below code :
<?php
function a($txt) {
b("Cleveland");
}
function b($txt) {
var_dump(debug_backtrace());
}
echo '<pre>';
a("Peter");
'</pre>';
?>
Output :
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"
}
}
}
Now, consider below code :
<?php
function a($txt) {
b("Cleveland");
}
function b($txt) {
var_dump(debug_backtrace());
}
echo '<pre>'.a("Peter").'</pre>';
?>
Output :
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" } } }
Why I'm getting two different outputs for the two different usages of <pre>
tag?
echo '<pre>';
a("Peter");
'</pre>';
AND
echo '<pre>'.a("Peter").'</pre>';
I think I'm doing nothing different in both of the statements. I'm doing almost the same thing then why I'm getting different outputs?
答案 0 :(得分:2)
echo
只有在完成字符串构建后才会运行。所以,如果你运行
function a() {
echo 'A';
}
echo 'Hello ' . a();
你最终会得到输出
AHello
这是因为函数被评估为构建echo调用的输出的一部分。如果函数本身有echo
语句(或var_dump
,print_r
等),那么它将首先显示。
有两种方法可以解决这个问题:
1)将您的函数重构为返回字符串
function a() {
return 'A';
}
echo 'Hello ' . a();
2)使用逗号代替字符串连接,将您的函数作为单独回显调用的一部分进行调用:
function a() {
echo 'A';
}
echo 'Hello ' , a();
在这两种情况下,您都会得到正确的输出:
你好A
专门针对您的问题,您看到的输出是var_dump
的输出,后跟<pre></pre>
,根本不会显示。{1}}。 (或者实际上,正如许多人现在提到的那样,只有<pre>
。虽然这对行为没有太大的影响。)
答案 1 :(得分:1)
echo
输出到STDOUT。 var_dump
输出STDOUT
。
echo '<pre>'; a("Peter"); '</pre>';
此输出 <pre>
。
然后输出 var_dump。
然后它在空中挥动字符串文字</pre>
并不做任何事情。
echo '<pre>'.a("Peter").'</pre>';
这开始构建一个字符串。
以<pre>
开头。
然后输出 var_dump
的结果,并加入{strong> a
函数的返回值(没有{ {1}}语句)到字符串。
然后它将return
加入字符串。
最后 输出字符串(</pre>
)