如何获取调用栈(堆栈)函数的局部变量

crazylazyboy 2011-11-28 01:16:59
我只知道debug_backtrace() 能得到php函数间的调用栈。
请问:有什么方法能获得调用函数的局部变量值。
function abc()
{
$m =100;
$n=200;
xyz();
}

function xyz() //无参数
{
$trace = debug_backtrace() ; //能从这个知道是abc调用了本函数
print_r($trace);

//有什么方法获得函数abc有哪些局部变量及其它们的值?

}

感激不尽!!
...全文
396 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
lvhong84 2012-11-02
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 的回复:]

你看看set_error_handler来handle错误的时候,它就能获得别人的局部变量
function userErrorHandler($errno, $errmsg, $filename, $linenum, $vars)
{
print_r($vars);
}

set_error_handler("userErrorHandler");

麻烦你出一下绝招吧,……
[/Quote]
set_error_handler能获得局部变量很容易理解,当被调用函数内部发生错误的时候,PHP捕获到这个错误,同时记录当前栈里面的变量作为参数传递给set_error_handler
lvhong84 2012-11-02
  • 打赏
  • 举报
回复
这个应该是得不到的,局部变量是放在栈里面的,在函数调用结束之后就销毁掉了,试想一下如果你是PHP的设计者你会每次调用函数的时候都把变量记录下来保存到其他地方么?这样会很明显的影响执行速度。
ci1699 2011-11-28
  • 打赏
  • 举报
回复
=_= 我爆发不了了。小星星们来回答吧。


[Quote=引用 8 楼 crazylazyboy 的回复:]

你看看set_error_handler来handle错误的时候,它就能获得别人的局部变量
function userErrorHandler($errno, $errmsg, $filename, $linenum, $vars)
{
print_r($vars);
}

set_error_handler("userErrorHandler");

麻烦你出一下绝招吧,……
[/Quote]
crazylazyboy 2011-11-28
  • 打赏
  • 举报
回复
你看看set_error_handler来handle错误的时候,它就能获得别人的局部变量
function userErrorHandler($errno, $errmsg, $filename, $linenum, $vars)
{
print_r($vars);
}

set_error_handler("userErrorHandler");

麻烦你出一下绝招吧,多谢了
ci1699 2011-11-28
  • 打赏
  • 举报
回复
你是逼我出绝招啊。
这也不行那也不能用。。


[Quote=引用 6 楼 crazylazyboy 的回复:]

[Quote=引用 5 楼 ci1699 的回复:]
echo $m; //没东东
xyz(get_defined_vars());//无要传递参数
function xyz() //无要参数

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

想要的是类似debug_backtrace强大的功能,不修改原程序就等获得堆栈信息
ci1699 2011-11-28
  • 打赏
  • 举报
回复
那这样吧。。


<?php

function abc()
{
$m =100;
$n=200;
xyz(get_defined_vars());
}

function xyz()
{
$trace = debug_backtrace() ; //能从这个知道是abc调用了本函数
print_r($trace);

//有什么方法获得函数abc有哪些局部变量及其它们的值?

echo $m;

}

abc();

crazylazyboy 2011-11-28
  • 打赏
  • 举报
回复
现在是abc调用xyz, 函数abc还没结束,m,n变量还在堆栈之中,可以读取到的。
就是不知道有什么方法。(或者有什么扩展吗?不要xdebug.dll和dbg.dll)
crazylazyboy 2011-11-28
  • 打赏
  • 举报
回复
我想要局部变量
夏之冰雪 2011-11-28
  • 打赏
  • 举报
回复
局部变量应该是获取不到的,只能获取全局变量。
还有,$trace = debug_backtrace()这个东西也不能帮你获取的,它只能获取到参数和函数名。
ci1699 2011-11-28
  • 打赏
  • 举报
回复
好像js中有方法取得到。php没取过。
竟然你xyz里面想用abc中的变量为何不定成全局变量呢?


<?php

function 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();

21,882

社区成员

发帖
与我相关
我的任务
社区描述
从PHP安装配置,PHP入门,PHP基础到PHP应用
社区管理员
  • 基础编程社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧