<?php
$a=90;
$b=90.8;
$c=true;
$d="hello";
 
 function rec($a,$b,$c,$d){
 return $a=78;
   $b=60.8;
   $c=false;
  $d="beijing";
 }
  echo rec($a,$b,$c,$d);
这样的结果是78
然后我变成这样<?php
$a=90;
$b=90.8;
$c=true;
$d="hello";
 
 function rec($a,$b,$c,$d){
 return $a=78;
   $b=60.8;
   $c=false;
  $d="beijing";
 }
   rec($a,$b,$c,$d);
   echo $a.$b.$c.$d;
结果就是  90          90.8         1          hello
我完全晕了,先看第一个我把$a=90带入到函数中,函数被重新赋值为90,然后rec()取得返回值90答案不应该是90吗。还有后面第二段代码,完全不懂结果为什么这样,有大神能详解吗!!!

解决方案 »

  1.   

    在 php 里没听说过堆栈,可能是忘了,但是你函数的return 是不对的
      

  2.   

    执行结果没有任何问题function rec($a,$b,$c,$d){
     return $a=78;
       $b=60.8;
       $c=false;
      $d="beijing";
     }
    这个函数本身就有问题,return语句后面的语句是不会执行的,另外函数里的$a是局部变量,是不会影响外面定义的全局变量的,除非用&引用或者global
      

  3.   

    function rec($a,$b,$c,$d){
     return $a=78;
       $b=60.8;
       $c=false;
      $d="beijing";
     }
      echo rec($a,$b,$c,$d);
    当然输出 78,因为你有 return $a=78;(对 $a 的赋值是费油意义的)rec($a,$b,$c,$d);
    echo $a.$b.$c.$d;
    你没有承接 rec($a,$b,$c,$d); 的返回值,自然只会输出变量的原有值
    这也反正了在函数中的赋值,是不会影响到外面的
      

  4.   

    你只是在function里赋值了,并没有影响function外的变量
    而且你这个与堆和栈都没有关系。$a = 1;function rec($a){
        $a = 2;
        return $a;
    }echo $a;
    rec($a);
    echo $a;像这样$a都是1
      

  5.   


    $a = 1;
     
    function rec($a){
        $a = 2;
        return $a;
    }
     
    echo $a;
    rec($a);
    echo $a;
    这样$a都是1
    与堆和栈没有关系
      

  6.   

    2楼说错了php是有堆栈的,但这和本例没什么关系。堆栈是面向对象用的。