2011-09-13 12 views
9

Tôi có một công trình như thế này trong tập tin cấu hình của tôi:php tĩnh trong câu lệnh if

<?php 
if (true) { 
    $nonstatic = 1; 
    static $config = 1; 
} 
else { 
    $nonstatic = 2; 
    static $config = 2; 
} 

echo $nonstatic; 
echo $config; 
?> 

Vậy tại sao các $ config chứa 2 nếu phần này của báo cáo kết quả là sai và $ không tĩnh chứa 1? Nó là một lỗi?

+0

Đây có phải là toàn bộ tập lệnh hoặc có mã không? –

+1

Bạn sẽ không khai báo biến tốt hơn bên ngoài 'if' và chỉ đơn giản là gán nó một giá trị bên trong? Tôi chưa bao giờ thấy từ khóa 'static' được sử dụng như thế này, mặc dù điều đó không có nghĩa là nó sai ... – DaveRandom

+0

Có vẻ như khai báo tĩnh cuối cùng (bất kể cái gì) quyết định giá trị. – Vikash

Trả lời

11

Tôi cho rằng đoạn này đang được đưa vào từ một hàm.

Việc khởi tạo biến tĩnh được giải quyết tại thời gian biên dịch và if the interpreter finds multiple initialisations, it simply takes the bottom one.

+0

Đặc biệt, điều này có nghĩa là điều kiện _around_ một khởi tạo tĩnh không có hiệu lực. –

+0

Wow cảm ơn vì câu trả lời! tôi đã học được điều gì đó mới !! – arijeet