2016-02-08 86 views
6
function genTokenNo() 
{ 
    static $i=0; 
    $i=$i+1; 
    return str_pad($i, 5, '0', STR_PAD_LEFT); 
} 

Quando ho chiama questa funzione in un altro file della funzione non restituisce valore unico (un valore incrementato). Anche mentre faccio eco a questa funzione nello stesso file (dove viene eseguita la funzione), funziona perfettamente. Conosco il concetto di scope della variabile statica come ho già provato sostituendo $ i con $ _SESSION ['i'] ma nessun risultato atteso. Grazie in anticipo.variabile statica non incrementare in funzione di chiamata

+1

Ogni volta che si chiama genTokenNo() è possibile impostare manualmente i $ 0. – mazedlx

+0

no get 00001 –

+0

Quando ho provato il tuo codice restituirà +1 ogni volta che chiamo funzione come 'echo genTokenNo(); // 00001 echo "
"; echo genTokenNo(); // 00002 echo "
"; echo genTokenNo(); // 00003 echo "
"; echo genTokenNo(); // 00004' –

risposta

2

Nota il valore di $i non è persistente. Pertanto, ogni volta che si esegue una nuova richiesta al server, lo script viene ricaricato e $i viene reimpostato su 0.

Per mantenere la variabile nella sessione per utente, utilizzare $SESSION['i'] ma, come già provato, questo sarà univoco per sessione, non a livello globale.

Per avere il numero univoco è necessario memorizzare sul disco, usando fopen/flock/fread/fwrite/fclose funzioni.

-1

quando funzione esiste poi ha perso il valore della variabile statica

if(isset($_SESSION['i'])) 
    $_SESSION['i']++; 
else 
    $_SESSION['i']=0; 
+0

No .. stessa uscita 00001. –

+0

questo è il formato corretto e sostituisce la sezione variabile statica usata quella variabile di sessione –

+0

Sì, ho provato questo, ma ancora dà lo stesso output. 00001 –

0

Per una singola richiesta dovrebbe funzionare bene -

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

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

uscita

00001 - 00002 - 00003 

Ma se si richiede più volte, il valore verrà ripristinato a ogni richiesta e ogni volta che la risposta sarà la stessa. Suggerirei di memorizzare il valore nel database o in un file. In questo caso l'uso di seesion non è affidabile.

+0

$ sql = "INSERT INTO tabella SET TokenNo = '". GenTokenNo(). "'; Questo è l'uso di funzione in secondfile.php Sto cercando di memorizzare l'output nel database –

+0

Quindi suppongo che siano in richieste diverse –

0

La vostra struttura sarà simile di seguito:

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 
+0

Sir Ho già incluso il file nell'altro file –

+0

@sadiamallick Puoi compiacere il codice come ho postato nella mia risposta, intendo dire entrambi i codici di codice –

+0

Signore che ho postato –

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); 
?>