代码之家  ›  专栏  ›  技术社区  ›  Brian Bruman

在PHP中,如何在页面上只回显一次函数?

  •  -1
  • Brian Bruman  · 技术社区  · 7 年前

    我的职能是:

    curl_setopt( $curl, CURLOPT_PROGRESSFUNCTION, function ( $resource, $download_size, $downloaded_size, $upload_size, $uploaded_size) use ($array)
    {
    static $previousProgress = 0;
    
        if ( $download_size == 0 ) {
            $progress = 0;
        } else {
            $progress = round( $downloaded_size * 100 / $download_size );
        }
    

    正如你所看到的,我在插入我自己的变量 use 在函数的末尾。

    我要做的就是在 else 条件

    echo ' ' . $progress . '%' . ' (' . bytes($downloaded_size) . ' of ' . bytes($download_size) . ') ';
    

    我曾尝试过

    static $previousProgress = 0;
    $count = $previousProgress++;
    
        } else {
        if ($count == 1) { echo echo ' ' . $progress . '%' . ' (' . bytes($downloaded_size) . ' of ' . bytes($download_size) . ') '; }
            $progress = round( $downloaded_size * 100 / $download_size );
        }
    

    但此时,函数在命中 其他的 条件。

    我当然可以这样做

    static $previousProgress = 0;
        $count = $previousProgress++;
        if ($count == 1) { echo ' ' . $progress . '%' . ' (' . bytes($downloaded_size) . ' of ' . bytes($download_size) . ') '; }
    

    它只能回声一次。但问题是 CURL 没有 $downloaded_size $download_size 变量设置和显示为 0 bytes -因此,它需要处于其他状态。

    我试过用 true / false 变量,就像一个人通常会做的那样,在 for foreach 循环,但是由于函数只是递归运行直到超时,所以函数再次启动,而这不起作用。

    如我所说,我可以在这个函数中插入一个变量数组来帮助我…但是考虑到函数重新开始,并且每次都重新运行,我不确定如何做到这一点。

    尝试了其他随机的事情,但我显然错过了一些东西。如何在重复功能中仅回显下载大小一次?

    1 回复  |  直到 7 年前
        1
  •  1
  •   Barmar    7 年前

    静态布尔变量应该做您想要做的。

    static $firstTime = true;
    if ($firstTime) {
        echo "something";
        $firstTime = false;
    }
    

    代码的问题可能是因为使用了后增量。如果 $previousProgress 0 ,线:

    $count = $previousProgress++;
    

    将设置 $count (旧值)同时递增 $前一个程序 1 . 所以 if ($count == 1) 直到 第二 迭代。 如果你用过 ++$previousProgress 这会让他们两个 . 这就是前增量和后增量之间的区别。

    推荐文章