<pre> tag?

时间:2017-12-08 15:36:18

标签: php html output echo pre

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?

2 个答案:

答案 0 :(得分:2)

echo只有在完成字符串构建后才会运行。所以,如果你运行

function a() {
  echo 'A';
}
echo 'Hello ' . a();

你最终会得到输出

  

AHello

这是因为函数被评估为构建echo调用的输出的一部分。如果函数本身有echo语句(或var_dumpprint_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>

相关问题