Tôi đang gặp sự cố với các biến toàn cục trong php. Tôi có một tập hợp số $screen
được đặt trong một tệp, yêu cầu tệp khác gọi là initSession()
được xác định trong một tệp khác. initSession()
tuyên bố global $screen
và sau đó xử lý thêm $ nữa màn hình bằng cách sử dụng giá trị được đặt trong tập lệnh đầu tiên.biến toàn cầu trong php không hoạt động như mong đợi
Làm cách nào có thể?
Để làm cho mọi thứ trở nên khó hiểu hơn, nếu bạn cố gắng đặt lại màn hình $, sau đó gọi số initSession()
, nó sẽ sử dụng giá trị được sử dụng lần đầu tiên một lần nữa. Đoạn mã sau sẽ mô tả quá trình. Ai đó có thể đi giải thích điều này?
$screen = "list1.inc"; // From model.php
require "controller.php"; // From model.php
initSession(); // From controller.php
global $screen; // From Include.Session.inc
echo $screen; // prints "list1.inc" // From anywhere
$screen = "delete1.inc"; // From model2.php
require "controller2.php"
initSession();
global $screen;
echo $screen; // prints "list1.inc"
Cập nhật:
Nếu Tôi tuyên bố $screen
toàn cầu một lần nữa ngay trước khi đòi hỏi mô hình thứ hai, $ màn hình được cập nhật đúng đối với phương pháp initSession()
. Lạ thật.
'global $ a;' tương đương với '$ a = & $ GLOBALS ['a'];'. Nghĩa là, nó tạo một tham chiếu trong phạm vi cục bộ có cùng tên. Bên ngoài một chức năng, bạn luôn ở trong phạm vi toàn cầu. PHP không cung cấp "phạm vi tệp". – Matthew