2013-07-05 21 views
6
function track_times() { 
static $i = 0; 
$i++; 
static $i = 5; 
return $i; 
} 

echo track_times() . "\n"; 
echo track_times() . "\n"; 

Kết quả là:Tại sao phép gán biến tĩnh thứ hai có hiệu lực không phải là lần đầu tiên?

6 
7 

Tôi biết mọi người không sử dụng static biến theo cách này, chỉ cần không thể giải thích kết quả. Kết quả ngụ ý việc gán thứ hai có hiệu lực, nhưng số tự tăng thêm $i trước khi gán, vậy tại sao lời gọi đầu tiên của hàm trả về 6?

+0

nhưng tại sao bạn muốn viết mẫu này? không hợp lý. – Raptor

Trả lời

3

Khai báo tĩnh được giải quyết trong thời gian biên dịch. Bạn đang tăng nó trong thời gian chạy. Do đó bạn đang tăng nó sau khi nó đã được khai báo là 5. Xem thêm http://www.php.net/manual/en/language.variables.scope.php

+0

Điều này có ý nghĩa, cảm ơn bạn! – samluthebrave

+0

Nếu tôi xóa 'tĩnh' trong lần gán đầu tiên, kết quả sẽ là '5, 5', vậy nó tạo ra sự khác biệt như thế nào? – samluthebrave

Các vấn đề liên quan