数码资讯
PHP中函数嵌套层次结构分析
函数嵌套,这个名字有点纠缠,也许不是很清楚,一个更常见的函数嵌套:递归函数,也就是函数本身嵌套,它被认为在PHP中不应该有太多的函数嵌套,这是因为在一段时间以前,不小心使用递归。当递归深度达到100时,也就是说,当嵌套函数的数量达到100时,程序将报告一个致命错误: 复制代码代码如下所示: 函数RT
选购提示
关注价格、性能、续航、售后和真实使用场景,理性比较后再下单。
函数嵌套,这个名字有点纠缠,也许不是很清楚,一个更常见的函数嵌套:递归函数,也就是函数本身嵌套,它被认为在PHP中不应该有太多的函数嵌套,这是因为在一段时间以前,不小心使用递归。当递归深度达到100时,也就是说,当嵌套函数的数量达到100时,程序将报告一个致命错误:
复制代码代码如下所示:
函数RT(){
静态$ i;
echo $我+ +,';
(RT);
}
(RT);
(死亡);
在我的Win7 + PHP5.3环境,以下是以下:致命错误:最大值函数嵌套级别100达成,中止!
一直以为是PHP本身的限制,直到有一天,切换到Linux环境下运行的命令行模式,并发现该计划仅限于死循环。在不同的环境下有着不同的结果。为什么嗯,我们在源代码中直接找到错误信息,没有发现相关内容,直接调试执行的整个过程,在Win下没有错误,原因是什么开关再次获胜,再次抬头,在Xdebug找到错误消息。在Xdebug 1242行开始。C文件:
复制代码代码如下所示:
XG(水平)+ +;
如果(XG(水平)= XG(max_nesting_level)){
Php_error (E_ERROR, Maximum function nesting level of'%ld'reached,
中止!
}
你什么意思以前的嵌套层次结构添加到Xdebug扩展,和为什么会有这个限制吗在Xdebug,Xdebug将记录每一个函数调用,包括函数的嵌套调用,存储调用和函数调用的时间当量。这些值是在分析程序的性能非常有用。没有这个限制,当嵌套的层数太多了,机器会耗尽内存。如果这是一个生产环境的服务器,一些服务将不可用,但是这个扩展将不会在生产环境的补充。但这种扩张可能对许多人开发服务器发生。如果开发人员的程序错误导致机器不可用,因此所有开发人员都无法工作,我认为这可能是增加限制的原因。
如果我们需要增加这个限制的层数呢更改源代码并重新编译Xdebug扩展不需要.在Xdebug配置项一项被称为xdebug.max_nesting_level。默认情况下,配置项目注释在php.ini,和注释去掉,这个价值是你想要的,200这是不够的,500,但是这个值不是太大,如果递归太多,此时对程序的性能有很大的影响,实现递归或递归替换将是更好的解决方案,使用循环堆栈形式如斐波那契(斐波那契)实现,实现更快的循环。
结论:PHP本身的函数嵌套不受限制,如果有一个限制,它也是一个内存限制,这是因为PHP函数的嵌套是以堆栈的形式实现的,每个函数都分配一部分内存来存储函数的一部分。
复制代码代码如下所示:
函数RT(){
静态$ i;
echo $我+ +,';
(RT);
}
(RT);
(死亡);
在我的Win7 + PHP5.3环境,以下是以下:致命错误:最大值函数嵌套级别100达成,中止!
一直以为是PHP本身的限制,直到有一天,切换到Linux环境下运行的命令行模式,并发现该计划仅限于死循环。在不同的环境下有着不同的结果。为什么嗯,我们在源代码中直接找到错误信息,没有发现相关内容,直接调试执行的整个过程,在Win下没有错误,原因是什么开关再次获胜,再次抬头,在Xdebug找到错误消息。在Xdebug 1242行开始。C文件:
复制代码代码如下所示:
XG(水平)+ +;
如果(XG(水平)= XG(max_nesting_level)){
Php_error (E_ERROR, Maximum function nesting level of'%ld'reached,
中止!
}
你什么意思以前的嵌套层次结构添加到Xdebug扩展,和为什么会有这个限制吗在Xdebug,Xdebug将记录每一个函数调用,包括函数的嵌套调用,存储调用和函数调用的时间当量。这些值是在分析程序的性能非常有用。没有这个限制,当嵌套的层数太多了,机器会耗尽内存。如果这是一个生产环境的服务器,一些服务将不可用,但是这个扩展将不会在生产环境的补充。但这种扩张可能对许多人开发服务器发生。如果开发人员的程序错误导致机器不可用,因此所有开发人员都无法工作,我认为这可能是增加限制的原因。
如果我们需要增加这个限制的层数呢更改源代码并重新编译Xdebug扩展不需要.在Xdebug配置项一项被称为xdebug.max_nesting_level。默认情况下,配置项目注释在php.ini,和注释去掉,这个价值是你想要的,200这是不够的,500,但是这个值不是太大,如果递归太多,此时对程序的性能有很大的影响,实现递归或递归替换将是更好的解决方案,使用循环堆栈形式如斐波那契(斐波那契)实现,实现更快的循环。
结论:PHP本身的函数嵌套不受限制,如果有一个限制,它也是一个内存限制,这是因为PHP函数的嵌套是以堆栈的形式实现的,每个函数都分配一部分内存来存储函数的一部分。
声明:本文内容用于数码产品信息整理与选购参考,具体价格、库存、售后政策以官方渠道和电商页面实时信息为准。