PHP - Superglobals: Cổng vào các Biến Toàn cục

Xin chào các pháp sư PHP tương lai! Hôm nay, chúng ta sẽ bắt đầu một hành trình thú vị vào thế giới của các Biến Toàn cục Superglobals trong PHP. Đừng lo lắng nếu bạn mới bắt đầu học lập trình - tôi sẽ là người hướng dẫn thân thiện của bạn, và chúng ta sẽ khám phá chủ đề này từng bước một. Cuối cùng của bài hướng dẫn này, bạn sẽ sử dụng các công cụ mạnh mẽ này như một chuyên gia!

PHP - Superglobals

什么是 Superglobals?

Trước khi chúng ta đi sâu vào, hãy hiểu Biến Toàn cục Superglobals là gì. Hãy tưởng tượng bạn có một balô ma thuật mà bạn có thể truy cập từ bất kỳ đâu trong mã PHP của mình. Đó chính là essence của các Biến Toàn cục Superglobals - các biến đặc biệt luôn có sẵn, không phụ thuộc vào phạm vi. Chúng giống như chiếc dao quân dụng đáng tin cậy của bạn trong thế giới PHP!

Bây giờ, hãy cùng khám phá từng Biến Toàn cục một:

1. $GLOBALS

Mảng $GLOBALS giống như một két bảo vệ chứa tất cả các biến toàn cục trong mã PHP của bạn. Nó rất hữu ích khi bạn muốn truy cập các biến toàn cục từ bên trong các hàm hoặc phương thức.

Ví dụ:

$x = 75;
$y = 25;

function addition() {
    $GLOBALS['z'] = $GLOBALS['x'] + $GLOBALS['y'];
}

addition();
echo $z; // Xuất: 100

Trong ví dụ này, chúng ta sử dụng $GLOBALS để truy cập và thay đổi các biến toàn cục bên trong một hàm. Nó giống như với tay vào balô ma thuật từ bất kỳ đâu trong mã của bạn!

2. $_SERVER

$_SERVER là nguồn thông tin chính về các headers, đường dẫn và vị trí của script. Nó giống như một trợ lý cá nhân biết mọi thứ về môi trường máy chủ.

Ví dụ:

echo "Tên Máy chủ: " . $_SERVER['SERVER_NAME'] . "<br>";
echo "Phần Mềm Máy chủ: " . $_SERVER['SERVER_SOFTWARE'] . "<br>";
echo "Địa chỉ Client: " . $_SERVER['REMOTE_ADDR'];

Mảnh mã này sẽ hiển thị thông tin về máy chủ và client. Nó rất hữu ích cho việc thu thập thông tin hệ thống hoặc tùy chỉnh ứng dụng dựa trên chi tiết máy chủ.

3. $_GET

$_GET được sử dụng để thu thập dữ liệu gửi trong URL. Nó giống như nhận một thẻ postcard với thông tin viết trên đó.

Ví dụ:

// Giả sử URL là: example.com/page.php?name=John&age=30

echo "Tên: " . $_GET['name'] . "<br>";
echo "Tuổi: " . $_GET['age'];

Mã này sẽ hiển thị tên và tuổi được truyền trong URL. Lưu ý, dữ liệu $_GET có thể nhìn thấy trong URL, vì vậy đừng sử dụng nó cho thông tin nhạy cảm!

4. $_POST

$_POST thu thập dữ liệu từ form gửi bằng phương thức HTTP POST. Nó giống như nhận một phong bì密封 có thông tin bên trong.

Ví dụ:

// Giả sử này được xử lý sau khi gửi form
if ($_SERVER["REQUEST_METHOD"] == "POST") {
    $name = $_POST['name'];
    $email = $_POST['email'];
    echo "Chào mừng, $name! Chúng tôi sẽ liên hệ bạn tại $email.";
}

Mã này xử lý dữ liệu gửi qua form. Khác với $_GET, dữ liệu $_POST không hiển thị trong URL, làm cho nó phù hợp hơn cho thông tin nhạy cảm.

5. $_FILES

$_FILES là bộ xử lý tải lên tệp của bạn. Nó giống như có một nhân viên chuyên trách tệp trong mã PHP của bạn.

Ví dụ:

if(isset($_FILES['file'])) {
    $file_name = $_FILES['file']['name'];
    $file_size = $_FILES['file']['size'];
    $file_tmp = $_FILES['file']['tmp_name'];

    move_uploaded_file($file_tmp, "uploads/" . $file_name);
    echo "Tệp đã tải lên thành công!";
}

Mã này xử lý việc tải lên tệp, lưu tệp tải lên trong thư mục 'uploads'.

6. $_COOKIE

$_COOKIE lưu trữ dữ liệu trong trình duyệt của người dùng. Nó giống như để lại một笔记 cho chính mình mà bạn có thể đọc sau này.

Ví dụ:

// Đặt một cookie
setcookie("user", "John Doe", time() + (86400 * 30), "/");

// Đọc một cookie
if(isset($_COOKIE['user'])) {
    echo "Chào mừng quay lại, " . $_COOKIE['user'] . "!";
} else {
    echo "Chào mừng, người dùng mới!";
}

Mã này đặt một cookie và sau đó đọc nó. Cookies rất hữu ích cho việc ghi nhớ các tùy chọn người dùng hoặc trạng thái đăng nhập.

7. $_SESSION

$_SESSION lưu trữ dữ liệu cho một người dùng duy nhất trên nhiều trang. Nó giống như có một két cá nhân cho mỗi khách truy cập vào trang web của bạn.

Ví dụ:

session_start();
$_SESSION['username'] = "JohnDoe";
$_SESSION['login_time'] = time();

echo "Chào mừng, " . $_SESSION['username'] . "!";
echo "Bạn đã đăng nhập lúc " . date('Y-m-d H:i:s', $_SESSION['login_time']);

Mã này bắt đầu một phiên và lưu trữ thông tin người dùng. Sessions非常适合 duy trì trạng thái người dùng trên các trang khác nhau.

8. $_REQUEST

$_REQUEST là sự kết hợp của $_GET, $_POST và $_COOKIE. Nó giống như một cửa hàng một-stop-shop cho dữ liệu đầu vào.

Ví dụ:

// Điều này sẽ hoạt động bất kể dữ liệu đến từ GET, POST hay COOKIE
$username = $_REQUEST['username'];
echo "Xin chào, $username!";

Mặc dù tiện lợi, nhưng thường tốt hơn là sử dụng $_GET, $_POST hoặc $_COOKIE trực tiếp để rõ ràng và an toàn hơn.

9. $_ENV

$_ENV chứa các biến môi trường. Nó giống như có quyền truy cập vào bảng điều khiển của máy chủ.

Ví dụ:

echo "Root của tài liệu là: " . $_ENV['DOCUMENT_ROOT'];

Mã này hiển thị root của tài liệu trên máy chủ. Lưu ý rằng sự có mặt của các biến môi trường có thể thay đổi tùy thuộc vào cấu hình máy chủ.

Superglobals Nhìn Nhanh

Dưới đây là bảng tham khảo nhanh của tất cả các Superglobals chúng ta đã covered:

Superglobal Mục đích
$GLOBALS Truy cập các biến toàn cục từ bất kỳ phạm vi nào
$_SERVER Thông tin về máy chủ và môi trường thực thi
$_GET Biến HTTP GET
$_POST Biến HTTP POST
$_FILES Biến HTTP Tệp Tải lên
$_COOKIE HTTP Cookies
$_SESSION Biến Session
$_REQUEST Biến HTTP Yêu cầu
$_ENV Biến Môi trường

Và thế là xong, các học sinh yêu quý của tôi! Chúng ta đã cùng nhau hành trình qua vùng đất của các Biến Toàn cục Superglobals trong PHP. Nhớ rằng, đây là những công cụ mạnh mẽ, vì vậy hãy sử dụng chúng một cách khôn ngoan. Luôn làm sạch và xác minh đầu vào để giữ cho ứng dụng của bạn an toàn.

Khi chúng ta kết thúc, tôi nhớ lại một câu chuyện từ những ngày đầu dạy học. Một học sinh từng hỏi tôi tại sao chúng được gọi là "Superglobals." Tôi đã trả lời vui vẻ, "Vì chúng mặc áo choàng và chiến đấu với tội phạm trong phạm vi toàn cục!" Mặc dù điều đó không phải là đúng, nhưng nghĩ về chúng như những siêu anh hùng trong mã PHP của bạn không phải là quá xa.

Tiếp tục luyện tập, 保持好奇心, và chúc mừng lập trình!

Credits: Image by storyset