PHP对象常量运行时最大函数嵌套级别

时间:2011-09-30 21:17:08

标签: php runtime nested

我达到了最大功能嵌套级别(问题末尾的完整列表)。我意识到解决这个问题的方法是xdebug.max_nesting_level,但对此有何不妥?另外,我怎样才能更好地实现我的代码。

我正在写一个irc客户端,现在很多时候自称。

调用堆栈(折叠)

#     |    Time        |    Memory     |    Function           |    Location
1     |    0.0010      |    800152     |    {main}( )          |    ..\index.php:0
2     |    0.0010      |    802416     |    IRCBot->__construc |    ..\index.php:225
3     |    0.1104      |    804368     |    IRCBot->cont( )    |    ..\index.php:34
4     |    0.1945      |    814592     |    IRCBot->cont( )    |    ..\index.php:144
......|................|...............|.......................|.....................
96    |    113.8191    |    1121560    |    IRCBot->cont( )    |    ..\index.php:144
97    |    114.0116    |    1126928    |    IRCBot->cont( )    |    ..\index.php:144
98    |    114.2020    |    1132384    |    out( )             |    ..\index.php:105
99    |    114.2020    |    1132384    |    flush2( )          |    ..\index.php:14

我知道我可以通过增加max_nesting_level来解决这个问题,但是当嵌套级别达到新的最大值时会发生什么?另外,我这样做是为了记忆等。

function cont($config) {
    $data = fgets($this->socket, 256);
    $this->cont($config);
}

的问题:

  

增加max_nesting_level是否会增加我服务器的负载?

     

有没有办法重新设计此代码以避免此问题?

     

在CGI安装上运行这样的PHP脚本是不是很糟糕?

2 个答案:

答案 0 :(得分:1)

从内存和计算的角度来看,递归都是昂贵的,如果你已经超过100次调用,那么这应该提醒你这不是正确的递归调用应用程序。

从套接字获取数据绝对不是应该使用递归解决的问题。

答案 1 :(得分:1)

确定一段时间循环会更有效率。而且我也相信你实际上想要存储从套接字返回的所有日期,而不是每次都覆盖$ data的内容。另外,在这里传递$ config变量似乎没用。这是一个更新版本:

function cont() {
    while (!feof($this->socket)) {
        fgets($this->socket, 256);
    }
}