Kết nối

[PHP] Phần 18: Biến toàn cục 1

2.247 lượt xem 
 
Thể loại: Lập trình Web với PHP 

Từ PHP phiên bản 4.1.0 trở đi, lập trình viên có thể truy xuất các biến toàn cục ở bất kỳ không gian nào khi xây dựng ứng dụng Web bằng PHP.

Biến toàn cục

Một số loại biến được định nghĩa trước là các biến toàn cục. Vậy biến toàn cục là gì? Để dễ hiểu, bạn cứ hình dung đây là các biến có thể được truy xuất từ bất kỳ lớp nào, hàm nào và tập tin nào mà không cần phải định nghĩa gì cả.

Các biến toàn cục trong PHP được viết hoa, gồm các loại biến:

  • $GLOBALS: mảng lưu trữ tất cả biến toàn cục
  • $_SERVER: mảng lưu trữ các biến ở Server, rất hay sử dụng
  • $_REQUEST: mảng lưu trữ các biến Request, rất hay sử dụng
  • $_POST: mảng lưu trữ các biến khi thực hiện Post, rất hay sử dụng
  • $_GET: mảng lưu trữ các biến khi thực hiện Get, rất hay sử dụng
  • $_FILES: : mảng lưu trữ các biến khi thực hiện các chức năng tập tin, rất hay sử dụng
  • $_ENV: mảng lưu trữ các biến vượt qua mã hiện tại thông qua môi trường phương thức
  • $_COOKIE: mảng lưu trữ các biến trong Cookie trình duyệt máy khách, rất hay sử dụng
  • $_SESSION: mảng lưu trữ các biến trong Session ở máy chủ, rất hay sử dụng

Biến toàn cục $GLOBALS

Đây là kiểu biến lưu trữ toàn bộ biến toàn cục trong 1 mảng gọi là $GLOBALS[index] với chỉ số index là tên biến toàn cục cần lấy.

Để hiểu rõ hơn về dạng biến $GLOBALS, bạn hãy xem ví dụ sau.

<?php
function hello() {
    $x = "biến cục bộ";

    echo '$x ở quy mô toàn cục: ' . $GLOBALS["x"] . "<br/>";
    echo '$x ở quy mô cục bộ (trong hàm): ' . $x . "<br/>";
}

$x = "biến toàn cục";
hello();
?>

Trong đoạn mã trên, chúng ta thấy biến $x trong hàm hello() và biến $x ngoài hàm hello() là 2 biến khác nhau. Nếu 1 biến được định nghĩa trong hàm thì biến này là biến cục bộ, tức chỉ được gọi trong hàm đó. Còn nếu biến được định nghĩa ở ngoài hàm, ngoài lớp thì biến này được xem là biến toàn cục, tức có thể truy xuất ở bất kỳ đâu bằng cú pháp $GLOBALS[“tên biến”], trong ví dụ là $GLOBALS[“x”].

Biến toàn cục $_SERVER

Biến $_SERVER là 1 mảng chứa các biến toàn cục lưu trữ thông tin từ phía server như header, path hay script location.

Ví dụ hiển thị một số thông tin từ server như sau.

<?php 
echo $_SERVER['PHP_SELF']; // thông tin về đường dẫn URL hiện tại
echo "<br>";
echo $_SERVER['SERVER_NAME']; // thông tin về tên server
echo "<br>";
echo $_SERVER['HTTP_HOST']; // thông tin về địa chỉ host
echo "<br>";
echo $_SERVER['HTTP_USER_AGENT']; // thông tin về trình duyệt người dùng
?>

/* Kết quả
* /test.php
* localhost
* localhost:8080
* Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/71.0.3578.98 Safari/537.36
*/

Để hiển thị toàn bộ các biến $_SERVER, bạn có thể dùng vòng lặp như đoạn mã sau.

<?php
   while (list($var,$value) = each ($_SERVER)) {
      echo "$var => $value <br />";
   }
?>

Sau đây là danh sách một số biến $_SERVER quan trọng:

  • $_SERVER[‘PHP_SELF’]: tên tập tin đang thực thi đoạn code
  • $_SERVER[‘GATEWAY_INTERFACE’]: Phiên bản Common Gateway Interface (CGI) mà server đang dùng.
  • $_SERVER[‘SERVER_ADDR’]: Địa chỉ IP của host server
  • $_SERVER[‘SERVER_NAME’]: Tên của host server (ví dụ www.dammio.com)
  • $_SERVER[‘SERVER_PROTOCOL’]: Tên và phiên bản của giao thức thông tin (ví dụ HTTP/1.1)
  • $_SERVER[‘REQUEST_METHOD’]: Phương thức sử dụng để truy cập trang (ví dụ POST)
  • $_SERVER[‘REQUEST_TIME’]: Nhãn thời gian bắt đầu thực hiện Request (ví dụ 1377687496)
  • $_SERVER[‘QUERY_STRING’]: chuỗi truy vấn nếu trong được truy cập thông qua một chuỗi truy vấn
  • $_SERVER[‘HTTP_ACCEPT_CHARSET’]: Trả về header Accept-Charset của request hiện tại (ví dụ utf-8,ISO-8859-1)
  • $_SERVER[‘HTTP_HOST’]: Trả header host của request hiện tại
  • $_SERVER[‘HTTP_REFERER’]: Trả về URL của trang kết nối đến. Lưu ý chú ý biến này để có thể phòng chống DOS hoặc DDOS hiệu quả hơn.
  • $_SERVER[‘HTTPS’]: Kiếm tra server có dùng giao thức HTTP bảo mật (HTTPS – Secure HTTP) hay không?
  • $_SERVER[‘REMOTE_ADDR’]: Trả về IP người dùng kết nối đến trang web
  • $_SERVER[‘REMOTE_HOST’]: Trả về tên host kết nối phía người dùng
  • $_SERVER[‘REMOTE_PORT’]: Cổng phía máy người dùng để kết nối với server

Biến toàn cục $_REQUEST

Đây là dạng biến dùng để thu thập dữ liệu sau khi submit 1 biểu mẫu HTML (HTML Form).

Ví dụ chúng ta có một biểu mẫu, trên biểu có 1 trường textbox để người dùng nhập dữ liệu tên và nút submit. Khi người dùng nhấn nút submit thì toàn bộ dữ liệu trên form này sẽ được gửi về server. Chúng ta có thể dùng biến $_REQUEST để tách và lấy dữ liệu tên ở trường textbox gửi về server như sau.

<html>
<body>

<form method="post" action="<?php echo $_SERVER['PHP_SELF'];?>">
<h2>Ví dụ từ website dammio.com</h2>
  Tên: <input type="text" name="fname">
  <input type="submit">
</form>

<?php
if ($_SERVER["REQUEST_METHOD"] == "POST") {
    // collect value of input field
    $name = $_REQUEST['fname']; // lấy giá trị từ trường có tên là fname.
    if (empty($name)) {
        echo "Tên gửi về trống";
    } else {
        echo "Tên: " . $name; // Hiển thị tên
    }
}
?>

</body>
</html>

Trong đoạn ví dụ trên, thuộc tính action để trống (action=””) tương đương với đoạn mã trong ví dụ, vì đều lấy chính tập tin chứa đoạn mã để làm đường dẫn submit. Ví dụ còn cẩn thận kiểm tra submit phải là POST hay không thông quan đoạn mã if ($_SERVER[“REQUEST_METHOD”] == “POST”), sau đó kiểm tra giá trị biến $name, nếu không rỗng thì hiển thị ra màn hình.

Biến toàn cục $_POST

Biến toàn cục $_POST dùng để thu thập dữ liệu form sau khi submit bằng phương thức POST. Nếu bạn tinh ý, bạn có thể thấy công dụng của $_POST na ná như $_REQUEST, thật vậy $_POST, $_GET và $_COOKIES là tập con của $_REQUEST.

Tương tự như ví dụ trên, chúng ta cũng có 1 form nhập liệu tên và gửi về server bằng phương thức POST.

<html>
<body>

<form method="post" action="<?php echo $_SERVER['PHP_SELF'];?>">
<h2>Ví dụ từ website dammio.com</h2>
  Tên: <input type="text" name="fname">
  <input type="submit">
</form>

<?php
if ($_SERVER["REQUEST_METHOD"] == "POST") {
    // collect value of input field
    $name = $_REQUEST['fname']; // lấy giá trị từ trường có tên là fname.
    if (empty($name)) {
        echo "Tên gửi về trống";
    } else {
        echo "Tên: " . $name; // Hiển thị tên
    }
}
?>

</body>
</html>

Biến toàn cục $_GET

$_GET không khác gì $_POST ở việc thu thập dữ liệu từ form, chỉ khác là $_GET thu thập dữ liệu thông qua phương thức GET, tức đẩy dữ liệu trên URL, ít bảo mật hơn POST.

Ví dụ tương tự như $_POST, chúng ta chỉ thay đổi method=”GET” ở form nhập liệu.

<html>
<body>

<form method="get" action="<?php echo $_SERVER['PHP_SELF'];?>">
<h2>Ví dụ từ website dammio.com</h2>
  Tên: <input type="text" name="fname">
  <input type="submit">
</form>

<?php
if ($_SERVER["REQUEST_METHOD"] == "GET") {
    // collect value of input field
    $name = $_REQUEST['fname']; // lấy giá trị từ trường có tên là fname.
    if (empty($name)) {
        echo "Tên gửi về trống";
    } else {
        echo "Tên: " . $name; // Hiển thị tên
    }
}
?>

</body>
</html>

Giả sử chúng ta lưu đoạn mã trên ở tập tin test.php, khi đó khi chạy đường dẫn http://localhost:8080/test.php?fname=dammio thì sẽ nhận được kết quả hiển tên dammio trên trình duyệt.

Kết luận

Vai trò của biến toàn cục rất quan trọng, giúp bạn truy xuất thông tin ở bất cứ nơi nào trong dự án PHP, hơn nữa biến toàn cục còn lưu trữ các thông tin về người dùng, server và dữ liệu truyền tải giữa server và client giúp tăng hiệu quả tương tác và xây dựng các chức năng Web thuận tiện hơn. Mời bạn tiếp tục theo dõi bài tiếp theo.

Theo dõi
Thông báo của
guest
1 Bình luận
Cũ nhất
Mới nhất Được bỏ phiếu nhiều nhất
Phản hồi nội tuyến
Xem tất cả bình luận
trackback

[…] [PHP] Phần 18: Biến toàn cục 1 – 24 tháng 01, 2019 lúc 3:46:37 Chiều […]

1
0
Rất thích suy nghĩ của bạn, hãy bình luận.x