<?php
function writeMyName()
  {
  echo "David Yang";
  }echo "My name is ".writeMyName();echo ".<br />That's right, ".writeMyName();?>
输出的结果我觉得应该是:My name is David Yang.
That's right, David Yang但是程序执行出来是:
David YangMy name is David Yang.
That's right,为什么会出现这个问题???
刚学php  比较困惑,希望高人指点一下,谢谢了!

解决方案 »

  1.   

    有点怪,但从不这样写。return 比较好些
    <?php
    function writeMyName()
      {
      return  "David Yang";
      }echo "My name is ".writeMyName();echo ".<br />That's right, ".writeMyName();?>
      

  2.   

    其实不应该在里面直接输出,或者这样写也可以的。<?php
    function writeMyName()
      {
      echo "David Yang";
      }echo "My name is ";
    writeMyName();echo ".<br />That's right, ";
    writeMyName();
      

  3.   


    function writeMyName()
      {
      return "David Yang";//return 就会是你的期望,你的函数没返回值,在执行echo语句的时候,先执行了函数,就是函数里的echo
      }===========================
    function writeMyName($str)
      {
      echo $str . '#';
      }echo "My name is ".writeMyName(1) . writeMyName(2);//print  1#2#My name is,可见一个语句里,多个函数的调用顺序==========================class Test {
       public function main() {
           register_shutdown_function(array($this, "foo"));  
       }
       public function foo() {
           echo 'David Yang';
       }
    }
    $t = new Test();
    echo 'My name is ' . $t->main();//print My name is David Yang
      

  4.   

    就你的程序来说,的确很别扭,2楼的写法应该是你想要的,但是用return应该更好些,或许你就是想知道为什么第一个输出了而第二个没输出!呵呵!
      

  5.   

    你的
    echo "My name is ".writeMyName();
    输出之前运行到了writeMyname()函数了.但是那函数也有echo
    所以就是函数的echo在前 然后才到你的echo "My name is"....
      

  6.   

    echo 一个函数,这个函数也有 echo 时,先把函数的 echo 出来,再执行 echo 里的串。
      

  7.   


    <?php
    function writeMyName()
      {
      echo "David Yang";//这里是echo.
      }echo "My name is ".writeMyName();
    echo ".<br />That's right, ".writeMyName();
    //echo的时候会先执行函数,而函数里是直接echo,并不是返回值。所以就会先打印"David Yang";
    ?>
      

  8.   

    因为服务器在编译 “echo XXX” 的时候,
    会先编译 “XXX”,
    所以 “XXX” 的内容被先执行了
      

  9.   

    echo一个字符串,这个字符串包含一个函数输出,这个函数输出中也有echo时(正如lz所述),由于是不同级的echo,函数外的echo和函数中的echo都被压入栈中,但是函数外的echo在栈底,而函数中的echo位于栈顶,最后输出栈时,当然是首先输出栈顶后输出栈底,所以会出现lz所描述的情况~