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

Khi tôi gọi hàm này trong tệp khác hàm không trả về giá trị duy nhất (giá trị gia tăng). Ngoài ra trong khi tôi echo chức năng này trong cùng một tập tin (nơi chức năng được thực hiện) nó hoạt động tốt. Tôi biết khái niệm phạm vi biến tĩnh vì tôi đã thử điều này bằng cách thay thế $ i bằng $ _SESSION ['i'] nhưng không có kết quả mong đợi. Cảm ơn trước.biến tĩnh không gia tăng khi gọi hàm

+1

Mỗi lần bạn gọi genTokenNo(), bạn đặt $ i 0. – mazedlx

+0

no i get 00001 –

+0

Khi tôi thử mã của bạn, nó sẽ trả về +1 mỗi khi tôi gọi hàm như 'echo genTokenNo(); // 00001 echo "
"; echo genTokenNo(); // 00002 echo "
"; echo genTokenNo(); // 00003 echo "
"; echo genTokenNo(); // 00004' –

Trả lời

2

Lưu ý giá trị của $i không được duy trì. Vì vậy, bất cứ khi nào bạn chạy yêu cầu mới đến máy chủ, tập lệnh được tải lại và $i được đặt lại thành 0.

Để duy trì biến trong phiên người dùng sử dụng $SESSION['i'] nhưng như bạn đã thử, điều này sẽ là duy nhất mỗi phiên, không phải trên toàn cầu.

Để có toàn cầu số duy nhất bạn cần lưu trữ trên đĩa, sử dụng fopen/flock/fread/fwrite/fclose chức năng.

-1

khi chức năng tồn tại sau đó bị mất giá trị của biến tĩnh

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

Không .. cùng một đầu ra 00001. –

+0

đó là định dạng chính xác và thay thế phần biến tĩnh được sử dụng biến phiên –

+0

Có tôi đã thử điều này nhưng nó vẫn cho kết quả tương tự. 00001 –

0

Đối với một yêu cầu duy nhất cần làm việc tốt -

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

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

Output

00001 - 00002 - 00003 

Nhưng nếu bạn yêu cầu nhiều lần thì giá trị sẽ được đặt lại theo mọi yêu cầu và mỗi lần phản hồi sẽ giống nhau. Tôi sẽ đề nghị để lưu trữ các giá trị trong cơ sở dữ liệu hoặc một số tập tin. Trong trường hợp này sử dụng seesion không thể tin được.

+0

$ sql = "bảng INSERT INTO SET TokenNo = '". GenTokenNo(). "'; Đây là việc sử dụng Tôi đang cố gắng để lưu trữ đầu ra trong cơ sở dữ liệu –

+0

Vì vậy, tôi đoán rằng họ đang có trong các yêu cầu khác nhau –

0

cấu trúc của bạn sẽ trông giống như dưới đây:

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

Tôi đã bao gồm các tập tin trong tập tin khác –

+0

@sadiamallick Bạn có thể vui lòng mã như tôi được đăng trong câu trả lời của tôi, tôi muốn nói cả hai mã số –

+0

Tôi đã đăng bài –

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); 
?> 
Các vấn đề liên quan