天天躁日日躁狠狠躁AV麻豆-天天躁人人躁人人躁狂躁-天天澡夜夜澡人人澡-天天影视香色欲综合网-国产成人女人在线视频观看-国产成人女人视频在线观看

PHP中的函數(shù)嵌套層數(shù)限制分析

函數(shù)嵌套,這個(gè)名字有點(diǎn)糾結(jié),也許不太好理解。一個(gè)比較常見的函數(shù)嵌套特例:遞歸函數(shù),即函數(shù)自己嵌套自己。 一直以為在php中不能有太多的函數(shù)嵌套,這是因?yàn)樵谝郧澳承r(shí)候不小心用到了遞歸,在遞歸的深度達(dá)到100時(shí), 即函數(shù)嵌套的層數(shù)達(dá)到100時(shí),程序會(huì)報(bào)一個(gè) Fatal error。如下示例:
復(fù)制代碼 代碼如下:
function rt() {
static $i;
echo $i++, '<br />';
rt();
}
rt();
die();

在我的win7 + php5.3的環(huán)境下報(bào)錯(cuò)如下: Fatal error:Maximum function nesting level of ‘100′ reached, aborting!

一直以為是php本身的限制,直到某一天切換到liunx環(huán)境下以命令行的模式運(yùn)行,發(fā)現(xiàn),程序限入了死循環(huán)。 不同的環(huán)境下有不同的結(jié)果,為什么呢?好吧,我們直接在源碼中查找報(bào)錯(cuò)信息,發(fā)現(xiàn)沒有相關(guān)內(nèi)容,直接debug整個(gè)執(zhí)行過程,也沒有在win下的報(bào)錯(cuò)。 什么原因?再次切換到win下,再次查找,發(fā)現(xiàn)在xdebug中看到了報(bào)錯(cuò)信息。在xdebug.c文件的1242行開始:
復(fù)制代碼 代碼如下:
XG(level)++;
if (XG(level) == XG(max_nesting_level)) {
php_error(E_ERROR, "Maximum function nesting level of '%ld' reached,
aborting!", XG(max_nesting_level));
}

這表示什么?之前的函數(shù)嵌套的層數(shù)限制是xdebug擴(kuò)展加上的,為什么會(huì)有這個(gè)限制了呢?在xdebug中,xdebug中會(huì)記錄每次函數(shù)調(diào)用, 包括嵌套的函數(shù)調(diào)用,函數(shù)調(diào)用中的內(nèi)存,時(shí)間等值,這些值在分析程序性能時(shí)有大用。如果沒有這個(gè)限制,當(dāng)嵌套的層數(shù)太多,機(jī)器會(huì)內(nèi)存耗盡。 如果這是一臺生產(chǎn)環(huán)境的服務(wù)器,那么就會(huì)有部分服務(wù)不可用,當(dāng)然生產(chǎn)環(huán)境下是不會(huì)添加這個(gè)擴(kuò)展的。但是在多人共用的開發(fā)服務(wù)器上就可能有這個(gè)擴(kuò)展, 如果因?yàn)橐粋€(gè)開發(fā)人員的程序錯(cuò)誤導(dǎo)致機(jī)器不可用,從而使所有的開發(fā)人員不能工作,我想這也許是添加限制的原因吧。

如果我們需要把這個(gè)限制的層數(shù)加大,怎么辦呢?改源碼,重新編譯xdebug擴(kuò)展?不需要,在xdebug的配置項(xiàng)中有一項(xiàng)叫做xdebug.max_nesting_level, 默認(rèn)情況下,在php.ini中這個(gè)配置項(xiàng)是被注釋了的,去掉注釋,將這個(gè)值成你所需要的值,200?不夠,那500吧,但是這個(gè)值還是不要太大, 如果遞歸太多,對程序的性能有很大的影響,此時(shí),以棧的形式實(shí)現(xiàn)遞歸或者用循環(huán)替換遞歸會(huì)是一個(gè)更好的方案, 如:斐波那契數(shù)列(Fibonacci)的實(shí)現(xiàn),用循環(huán)來實(shí)現(xiàn)會(huì)更快。

結(jié)論:php本身的函數(shù)嵌套是沒有限制的,如果說有限制,也是內(nèi)存的限制。這是因?yàn)?a href=/itjie/phpjishu/ target=_blank class=infotextkey>php的函數(shù)嵌套是以棧的形式實(shí)現(xiàn)的。對于每個(gè)函數(shù)都會(huì)分配一段內(nèi)存來存儲(chǔ)函數(shù)局部的內(nèi)容。

php技術(shù)PHP中的函數(shù)嵌套層數(shù)限制分析,轉(zhuǎn)載需保留來源!

鄭重聲明:本文版權(quán)歸原作者所有,轉(zhuǎn)載文章僅為傳播更多信息之目的,如作者信息標(biāo)記有誤,請第一時(shí)間聯(lián)系我們修改或刪除,多謝。

主站蜘蛛池模板: 在线观看日本污污ww网站 | 一一本之道高清视频在线观看中文字幕 | 日本护士性生活 | 东北女人一级毛片 | 啊灬啊别停灬用力啊老师 | 亚洲 日韩 在线 国产 视频 | 午夜日韩久久影院 | 蜜桃视频无码区在线观看 | 韩国精品韩国专区久久 | 亚洲精品一二三区区别在哪 | 日本亚洲精品无码区国产电影 | 野花韩国视频中文播放 | 高h浪荡文辣文神奇宝贝 | 穿白丝袜边走边尿白丝袜 | 成年妇女免费播放 | YELLOW日本动漫高清免费 | 丰满的美女射精动态图 | xxnx日本| 金发欧美一区在线观看 | 在线视频 国产精品 中文字幕 | 嘿嘿视频在线观看 成人 | 午夜一区欧美二区高清三区 | 男女免费观看在线爽爽爽视频 | 98久久无码一区人妻A片蜜 | 国产成人自拍视频在线观看 | 久久久擼擼擼麻豆 | 天堂岛www| 一本道高清码v京东热 | 国产亚洲精品品视频在线 | 伦理片天堂eeuss影院2o12 | 老少配xxxxx欧美 | 忘忧草在线影院WWW日本二 | 十分钟视频影院免费 | 亚洲国产中文字幕新在线 | 欧美ⅹxxxx18性欧美 | 国产精品ⅴ视频免费观看 | 国产精品久久久久a影院 | 村妇偷人内射高潮迭起 | 国产黄大片在线视频 | 久久偷拍免费2017 | 午夜理论电影在线观看亚洲 |