静态变量在函数调用时不递增

时间:2016-02-08 11:45:34

标签: php static token

function genTokenNo()
{
    static $i=0;
    $i=$i+1;
    return str_pad($i, 5, '0', STR_PAD_LEFT);
}

当我在其他文件中调用此函数时,函数不会返回唯一值(递增值)。此外,当我在同一个文件(函数的位置)中回显此函数时,它工作正常。 我知道静态变量范围的概念,因为我已经尝试过将$ i替换为$ _SESSION [' i'],但没有预期的结果。 提前谢谢。

5 个答案:

答案 0 :(得分:2)

请注意,$i的值不会保留。因此,无论何时向服务器运行新请求,都会重新加载脚本并将$i重置为0

要在每个用户的会话中保留变量,请使用$SESSION['i'],但正如您已经尝试过的,每个会话都是唯一的,而不是全局的。

要使用fopen / flock / fread / fwrite / fclose函数,您需要在磁盘上存储全球唯一编号。

答案 1 :(得分:0)

对于单个请求,它应该可以正常工作 -

function genTokenNo()
{
    static $i=0;    
    $i=$i+1;
    return str_pad($i, 5, '0', STR_PAD_LEFT);
}

echo genTokenNo() . ' - ' . genTokenNo() . ' - ' . genTokenNo();

<强>输出

00001 - 00002 - 00003

但是如果您多次请求,则每次请求都会重置该值,并且每次响应都相同。我建议将值存储在数据库或某个文件中。在这种情况下使用seesion wolud不可靠。

答案 2 :(得分:0)

您的结构如下所示:

<强> file1.php

function genTokenNo()
{
    static $i=0;
    $i=$i+1;
    return str_pad($i, 5, '0', STR_PAD_LEFT);
}

<强> file2.php

include('file1.php');
//^^^^^^^^^^^^^^^^^^^ Include file before call that function.

echo genTokenNo(); //00001
echo "<br />";
echo genTokenNo(); //00002
echo "<br />";
echo genTokenNo(); //00003
echo "<br />";
echo genTokenNo(); //00004

答案 3 :(得分:0)

<强> file1.php

<?php
    function genTokenNo()
    {
        static $i=0;
        $i=$i+1;
        return str_pad($i, 5, '0', STR_PAD_LEFT);
    }
?>

<强> file2.php

<?php
include('file1.php');
$sql = "INSERT INTO table SET TokenNo='".genTokenNo()."' ";
mysql_query($sql);
?>

答案 4 :(得分:-1)

  

当函数存在时,则丢失静态变量的值

if(isset($_SESSION['i']))
   $_SESSION['i']++;
else
   $_SESSION['i']=0;
相关问题