本帖最后由 crazylazyboy 于 2011-11-28 13:25:27 编辑

解决方案 »

  1.   

    好像js中有方法取得到。php没取过。
    竟然你xyz里面想用abc中的变量为何不定成全局变量呢?
    <?phpfunction abc()
    {
      global $m,$n;
      $m =100;
      $n=200;  
      xyz();
    }function xyz()
    {
      global $m,$n;
      $trace = debug_backtrace() ; //能从这个知道是abc调用了本函数
      print_r($trace); //有什么方法获得函数abc有哪些局部变量及其它们的值? echo $m;}abc();
      

  2.   

    局部变量应该是获取不到的,只能获取全局变量。
    还有,$trace = debug_backtrace()这个东西也不能帮你获取的,它只能获取到参数和函数名。
      

  3.   

    现在是abc调用xyz, 函数abc还没结束,m,n变量还在堆栈之中,可以读取到的。
    就是不知道有什么方法。(或者有什么扩展吗?不要xdebug.dll和dbg.dll)
      

  4.   

    那这样吧。。
    <?phpfunction abc()
    {
      $m =100;
      $n=200;  
      xyz(get_defined_vars());
    }function xyz()
    {
      $trace = debug_backtrace() ; //能从这个知道是abc调用了本函数
      print_r($trace); //有什么方法获得函数abc有哪些局部变量及其它们的值? echo $m;}abc();
      

  5.   

    [Quote=引用 5 楼 ci1699 的回复:]
    echo $m; //没东东
    xyz(get_defined_vars());//无要传递参数
    function xyz() //无要参数想要的是类似debug_backtrace强大的功能,不修改原程序就等获得堆栈信息
      

  6.   

    你看看set_error_handler来handle错误的时候,它就能获得别人的局部变量
    function userErrorHandler($errno, $errmsg, $filename, $linenum, $vars) 
    {
      print_r($vars);
    }set_error_handler("userErrorHandler");麻烦你出一下绝招吧,多谢了
      

  7.   

    这个应该是得不到的,局部变量是放在栈里面的,在函数调用结束之后就销毁掉了,试想一下如果你是PHP的设计者你会每次调用函数的时候都把变量记录下来保存到其他地方么?这样会很明显的影响执行速度。
      

  8.   

    set_error_handler能获得局部变量很容易理解,当被调用函数内部发生错误的时候,PHP捕获到这个错误,同时记录当前栈里面的变量作为参数传递给set_error_handler