如何获取调用栈(堆栈)函数的局部变量 本帖最后由 crazylazyboy 于 2011-11-28 13:25:27 编辑 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 好像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(); 局部变量应该是获取不到的,只能获取全局变量。还有,$trace = debug_backtrace()这个东西也不能帮你获取的,它只能获取到参数和函数名。 现在是abc调用xyz, 函数abc还没结束,m,n变量还在堆栈之中,可以读取到的。就是不知道有什么方法。(或者有什么扩展吗?不要xdebug.dll和dbg.dll) 那这样吧。。<?phpfunction abc(){ $m =100; $n=200; xyz(get_defined_vars());}function xyz(){ $trace = debug_backtrace() ; //能从这个知道是abc调用了本函数 print_r($trace); //有什么方法获得函数abc有哪些局部变量及其它们的值? echo $m;}abc(); [Quote=引用 5 楼 ci1699 的回复:]echo $m; //没东东xyz(get_defined_vars());//无要传递参数function xyz() //无要参数想要的是类似debug_backtrace强大的功能,不修改原程序就等获得堆栈信息 你看看set_error_handler来handle错误的时候,它就能获得别人的局部变量function userErrorHandler($errno, $errmsg, $filename, $linenum, $vars) { print_r($vars);}set_error_handler("userErrorHandler");麻烦你出一下绝招吧,多谢了 这个应该是得不到的,局部变量是放在栈里面的,在函数调用结束之后就销毁掉了,试想一下如果你是PHP的设计者你会每次调用函数的时候都把变量记录下来保存到其他地方么?这样会很明显的影响执行速度。 set_error_handler能获得局部变量很容易理解,当被调用函数内部发生错误的时候,PHP捕获到这个错误,同时记录当前栈里面的变量作为参数传递给set_error_handler 再开一帖,还是关于htm输出php的问题 医药行业杂志网站招聘有1年经验PHP网站工程师 继续放面试题 为什么在本地能实现功能的网页上传到空间后不能实现呢? 这个为什么不能运行,会报错!~ 怎么样做站内短信提示页面? 求救~~~~~~~~~~~ 有函数可以重新加载在某个框架内的某个页面吗? 请问如何将html压缩?类似jq.mini,把所有的代码堆一块 用phpmailer如何群发邮件 PHP页面留言板添加每个IP限制回复一次 [散分]为编辑小MM提供的服务代码。关于图片上传的。
竟然你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();
还有,$trace = debug_backtrace()这个东西也不能帮你获取的,它只能获取到参数和函数名。
就是不知道有什么方法。(或者有什么扩展吗?不要xdebug.dll和dbg.dll)
<?phpfunction abc()
{
$m =100;
$n=200;
xyz(get_defined_vars());
}function xyz()
{
$trace = debug_backtrace() ; //能从这个知道是abc调用了本函数
print_r($trace); //有什么方法获得函数abc有哪些局部变量及其它们的值? echo $m;}abc();
echo $m; //没东东
xyz(get_defined_vars());//无要传递参数
function xyz() //无要参数想要的是类似debug_backtrace强大的功能,不修改原程序就等获得堆栈信息
function userErrorHandler($errno, $errmsg, $filename, $linenum, $vars)
{
print_r($vars);
}set_error_handler("userErrorHandler");麻烦你出一下绝招吧,多谢了