博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
php 调试工具及学习PHP垃圾回收机制了解引用计数器的概念
阅读量:6758 次
发布时间:2019-06-26

本文共 2411 字,大约阅读时间需要 8 分钟。

php代码工具:Xdebug  与分析工具 WinCacheGrind

Xdebug之函数大全:

string xdebug_call_class()返回当前被调用的函数或方法所属的类的类名

string xdebug_call_file()返回调用当前函数的文件名

string xdebug_call_function()返回调用当前正在执行的函数的函数名

int xdebug_call_line()返回该函数是在哪一行被调用的。

void xdebug_disable()/xdebug_enable()禁止/激活显示错误的跟踪栈信息

xdebug_start_error_collection()xdebug_stop_error_collection()xdebug_get_collected_errors()
错误收集开始函数,当此函数被执行的时候,xdebug将不在页面上显示错误信息,而是将错误信息以xdebug
自己的规则记录在缓冲区。直到遇到xdebug_stop_error_collection()函数。缓冲区的内容将由xdebug_get_collected_errors()
函数的调用而显示。此功能可以让你的页面不被xdebug的错误显示破坏。

array xdebug_get_headers()返回所有由php设置的头信息。比如由header(),setcookie函数设置的头信息.

xdebug_is_enabled()返回xdebug的跟踪状态是否被激活 xdebug.default_enable的值

int xdebug_memory_usage()返回脚本当前的内存使用数

int xdebug_peak_memory_usage()返回脚本直达目前为止这段过程中的使用内存的最高值

float xdebug_time_index()返回脚本开始到现在所使用的秒数

变量显示功能

var_dump( [mixed var [, ...]])

void xdebug_debug_zval( [stringvarname [, ...]] )
void xdebug_debug_zval_stdout([string varname [, ...]] )
返回一个变量的标准输出信息,包括类型,值,引用次数等。。

void xdebug_dump_superglobals()返回全局变量的信息

void xdebug_var_dump( [mixed var [,...]] ) 显示变量的详细信息
堆栈跟踪

array xdebug_get_declared_vars()返回申明的变量集合

array xdebug_get_function_stack()返回跟踪栈的详细信息(跟踪函数执行步骤)

函数跟踪

xdebug_start_code_coverage()
开始跟踪

arrayxdebug_get_code_coverage()

返回代码执行去向

 

 

php变量存在一个叫"zval"的变量容器中,"zval"变量容器包括含变量的类型和值,还包括额外的两个字节信息,分别是“is_ref”表示变量是否属于引用,“refcount”指向这个zval变量容器的变量个数。

如果你安装了,就可以用xdebug_debug_zval()显示“zval”的信息了。如下:

<?php
    
$str
=
"phpddt.com"
;
    
xdebug_debug_zval(
'str'
);

  

结果:

str:

(refcount=1, is_ref=0),

string 'phpddt.com' (length=10)

只有当变量容器在”refcount“变成0时就被销毁.当你unset()一个变量时,想要的“zval”中refcount就会减1,再来说说前几天遇到的:

<?php
    
$a
=
"aaa"
;
    
$b
= &
$a
;
    
unset(
$a
);
    
//echo $b; //这里依然会输出aaa,用xdebug_debug_zval打印你就知道为什么了
    
xdebug_debug_zval(
"b"
);

  

结果:

b:

(refcount=1, is_ref=0),string 'aaa' (length=3)

继续说引用计数器问题,对于array和object符合类型情况又不一样了:

<?php
    
/** by www.phpddt.com */
    
$arr
=
array
(
'a'
=>
'aaa'
,
'b'
=>
"bbb"
);
    
xdebug_debug_zval(
'arr'
);
    
$arr
[
'aaa'
] =
$arr
[
'a'
];
    
xdebug_debug_zval(
'arr'
);
?>

  

结果:

arr:

(refcount=1, is_ref=0),

array

  'a' => (refcount=1, is_ref=0),string 'aaa' (length=3)

  'b' => (refcount=1, is_ref=0),string 'bbb' (length=3)

arr:

(refcount=1, is_ref=0),

array

  'a' => (refcount=2, is_ref=0),string 'aaa' (length=3)

  'b' => (refcount=1, is_ref=0),string 'bbb' (length=3)

  'aaa' => (refcount=2, is_ref=0),string 'aaa' (length=3)

可以看到看到原有的数组元素和新添加的数组元素关联到同一个"refcount"2的zval变量容器.这里我也只是起到抛砖引玉的作用。

 

转载地址:http://waweo.baihongyu.com/

你可能感兴趣的文章
java随机生成n个不相同的整数
查看>>
DIV+CSS基础
查看>>
使用JS完成首页定时弹出广告图片
查看>>
codeforces 500c New Year Book Reading 【思维】
查看>>
Auto reloading enabled
查看>>
GitHub的使用方法
查看>>
AT3576 Popping Balls
查看>>
springboot入门_多数据源
查看>>
如果一个游戏上面加一个透明层,js能不能实现 点击透明层的任意点 而正常玩游戏...
查看>>
图的m着色问题
查看>>
oracle 查询char类型的数据
查看>>
Vue项目碰到"‘webpack-dev-server’不是内部或外部命令,也不是可运行的程序或批处理文件"报错...
查看>>
Android zxing扫描二维码 为什么有些机型扫描不出来或者很慢?
查看>>
SQLHelp sql数据库的DAL
查看>>
进阶第二课 Python内置函数(补)及自定义函数
查看>>
《王者荣耀》的英雄是怎么诞生的?有没有最厉害的英雄?
查看>>
公司常用几种请求
查看>>
python3 字符串格式化
查看>>
一个字符在字符串中出现最多的次数的打印
查看>>
图片的三级缓存
查看>>