PHP
PHP

Trang chủ

Biến superglobal trong PHP

PHP, viết tắt của Hypertext Preprocessor, là ngôn ngữ lập trình script phía máy chủ được thiết kế đặc biệt cho phát triển web. Điểm nổi bật của PHP so với các ngôn ngữ khác là khả năng tương thích với nhiều loại cơ sở dữ liệu và chạy mượt mà trên các máy chủ web. Tại Vietnix, chúng tôi không chỉ giới thiệu những khái niệm cơ bản về PHP mà còn cung cấp các ví dụ thực tế giúp bạn dễ dàng hiểu và áp dụng PHP vào việc phát triển website. Bên cạnh đó, Vietnix cũng thường xuyên cập nhật các bài viết mới về tính năng, mẹo và thủ thuật lập trình, giúp bạn giải quyết các thách thức phức tạp, từ đó không ngừng nâng cao và hoàn thiện kỹ năng lập trình của mình.
html
CSS
javascript
sql
python
php
c
c++
bootstrap
react
mysql
reactjs
vuejs
Javascript Tutorials
19/06/2024
8 phút đọc
Theo dõi Vietnix trên

Biến superglobal trong PHP

Biến superglobal trong PHP là các biến đặc biệt được PHP tự động tạo và giữ cho mỗi request và response của một ứng dụng web. Chúng đươc lưu trữ trong mảng liên kết toàn cục và có thể truy cập từ bất kỳ phần của mã PHP trong tất cả các phạm vi của ứng dụng. Các biến superglobal đóng vai trò quan trọng trong việc xử lý dữ liệu, theo dõi trạng thái của phiên làm việc và quản lý thông tin gửi đến và từ server. Hãy cùng Vietnix tìm hiểu thêm về biến superglobal trong PHP qua bài viết sau đây.

Biến superglobal trong PHP là gì?

Biến superglobal trong PHP là những mảng biến đặc biệt, luôn có sẵn trong mọi phạm vi và có thể được truy cập từ bất kỳ đâu trong mã PHP mà không cần khai báo trước. Mục đích chính là lưu trữ thông tin về trạng thái của ứng dụng, request (yêu cầu) từ người dùng, môi trường server,… Nhờ đó, người dùng dễ dàng lấy và sử dụng các thông tin này trong suốt quá trình xử lý.

Biến superglobal, loại biến đặc biệt trong PHP
Biến superglobal trong PHP

Với loại biến này bạn có thể thấy được lợi ích như sau:

  • Truy cập thông tin từ máy chủ web, người dùng và môi trường không cần truyền qua tham số hàm hay biến cục bộ.
  • Tính linh hoạt cao và dễ sử dụng, phạm vi truy cập của biến superglobal có thể tới bất kì nơi nào trong project.
  • Biến superglobal có thể được sử dụng để lưu trữ và chia sẻ dữ liệu giữa các tập lệnh PHP khác nhau.

Tuy nhiên chúng cũng mang lại một vài vấn đề nếu bạn không cẩn thận khi sử dụng:

  • Phân tích và sử lỗi khó khăn hơn: Do pham vị hoạt động quá rộng, truy cập hoặc có thể chỉnh sửa code ở mọi nơi.
  • Xung đột biến do cách đặt tên giống nhau giữa biến cục bộ và biến superglobal.
  • Ngoài ra vì pham vi hoạt động lơn cũng dễ để lộ các lỗ hổng bảo mật và các dữ liệu nhạy cảm, giảm an toàn khi triển khai project.

Mọi người cũng xem:

Các loại biến superglobal có sẵn trong PHP

Đây là danh sách các biến superglobal phổ biến trong PHP:

  • $GLOBALS
  • $_SERVER
  • $_REQUEST
  • $_GET
  • $_POST
  • $_SESSION
  • $_COOKIE
  • $_FILES
  • $_ENV

1. $GLOBALS

Đây là một biến được sử dụng để truy cập các biến chung (global) từ bất kỳ đâu trong file của PHP. Ngôn ngữ PHP lưu trữ tất cả các biến global vào trong mảng $GLOBAL[] mà trong đó index chỉ chứa tên biến global, có thể truy cập được.

Ví dụ:

<?php
$x = 300;
$y = 200;

function multiplication(){
	$GLOBALS['z'] = $GLOBALS['x'] * $GLOBALS['y'];
}

multiplication();
echo $z;
?>

Output như sau:

60000

Trong đoạn code trên có 2 biến chung (global) được khai báo là $x$y và đều được gán giá trị. Hàm multiplication() được khai báo để nhân các giá trị của 2 biến trên và lưu vào một biến khác tên $z được xác định trong mảng GLOBAL.

2. $_SERVER

Là một biến superglobal trong PHP dùng để chứa thông tin về header, đường dẫn, vị trí script.

Một vài trong số các phần tử này được dùng để lấy thông tin từ biến $_SERVER.

Ví dụ:

<?php
echo $_SERVER['PHP_SELF'];
echo "<br>";
echo $_SERVER['SERVER_NAME'];
echo "<br>";
echo $_SERVER['HTTP_HOST'];
echo "<br>";
echo $_SERVER['HTTP_USER_AGENT'];
echo "<br>";
echo $_SERVER['SCRIPT_NAME'];
echo "<br>"
?>

Output:

Screenshot 2023 11 03 084836

Ở kết quả ví dụ trên, phần tử $_SERVER được dùng để lấy thông tin. Bạn sẽ nhận được tên file hiện tại đã được xử lý bằng cách dùng phần tử PHP_SELF. Sau đó nhận được tên server được sử dụng hiện tại bằng phần tử SERVER_NAME và cũng như lấy tên server thông qua HTTP_HOST.

3. $_REQUEST

Biến $_REQUEST thường được sử dụng để thu thập dữ liệu khi gửi form HTML. Tuy nhiên hiện tại $_REQUEST hầu như không được sử dụng (không dùng được từ bản PHP 7.0 và bị loại bỏ từ bản 8.0) vì đã có $_POST và $_GET thực hiện cùng một nhiệm vụ và được sử dụng rộng rãi, phổ biến hơn.

Dưới đây là ví dụ code HTML và PHP để giải thích cách biến superglobal $_REQUEST hoạt động: 

<!DOCTYPE html>
<html>
<body>

<form method="post" action="<?php echo $_SERVER['PHP_SELF'];?>">
NAME: <input type="text" name="fname">
<button type="submit">SUBMIT</button>
</form>
<?php
if ($_SERVER["REQUEST_METHOD"] == "POST") {
	$name = htmlspecialchars($_REQUEST['fname']);
	if(empty($name)){
		echo "Name is empty";
	} else {
		echo $name;
	}
}
?>
</body>
</html>

Output như sau:

890

Trong đoạn code trên đã tạo một biểu mẫu lấy tên làm đầu vào từ người dùng và in tên của nó khi nhấp vào các button (apply/confirm/submit/next…). Các dữ liệu được chấp nhận trong biểu mẫu sẽ được chuyển vào cùng một trang bằng cách sử dụng phần tử $_SERVER[‘PHP_SELF’] như được chỉ định, bởi vì sử dụng dữ liệu trong cùng một trang bằng mã PHP. Dữ liệu được truy xuất bằng cách sử dụng biến mảng superglobal $_REQUEST.

4. $_POST

Đây là biến superglobal dùng để thu thập dữ liệu từ form HTML sau khi gửi. Khi form sử dụng phương thức post để truyền dữ liệu, dữ liệu sẽ không hiển thị trong chuỗi truy vấn, do đó các mức bảo mật được duy trì trong phương thức này.

Ví dụ:

<!DOCTYPE html>
<html>
<body>

<form method="post" action="<?php echo $_SERVER['PHP_SELF'];?>">
<label for="name">Please enter your name: </label>
<input name="name" type="text"><br>
<label for="age">Please enter your age: </label>
<input name="age" type="text"><br>
<input type="submit" value="Submit">
<button type="submit">SUBMIT</button>
</form>
<?php
$nm=$_POST['name'];
$age=$_POST['age'];
echo "<strong>".$nm." is $age years old.</strong>";
?>
</body>
</html>

Output như sau:

Screenshot 2023 11 03 085217

Trong đoạn code trên vừa tạo một form lấy tên và tuổi từ người dùng và truy cập dữ liệu sử dụng biến $_POST khi chấp nhận gủi dữ liệu đi. Mỗi một biến là một mảng có thể chứa nhiều hơn 2 giá trị. Vì thế đoạn code đã truy xuất tên, tuổi từ biến $_POST và lưu trữ trong 2 biến tên $nm$age.

5. $_GET

$_GET là một biến superglobal tương tự như $_POST. Khi biểu mẫu sử dụng phương thức get để truyền dữ liệu, dữ liệu sẽ hiển thị trong chuỗi truy vấn, do đó các giá trị không bị ẩn. Biến mảng superglobal $_GET lưu trữ các giá trị có trong URL.

Dưới đây là mã HTML và PHP để giải thích cách hoạt động của $_GET:

<!DOCTYPE html>
<html>
<head>
<title></title>
</head>
<body bgcolor="cyan">
	<?php
		$name = $_GET['name'];
		$city = $_GET['city'];
		echo "<h1>This is ".$name." of ".$city."</h1><br>";
	?>
	<img src = "2.jpg" alt = "nanilake" height = "400" width="500" />
</body>
</html>

Trong đoạn mã trên đã tạo một một hyperlink hình ảnh của Hồ Nainital sẽ đủa người dùng đến trang picture.php và đồng thời cũng mang theo các tham số name=”Nainilake”city=”Nainital”.

Nói cách khác, khi ban nhấp vào hình ảnh nhỏ của Hồ Nainital, bạn sẽ được chuyển đến trang tiếp theo picture.php cùng với các tham số. Vì phương thức mặc định là get, các tham số này sẽ được truyền đến trang kế tiếp bằng phương thức get và chúng sẽ được hiển thị trong thanh địa chỉ. Khi chúng ta muốn truyền giá trị cho một địa chỉ, chúng được gắn vào địa chỉ bằng dấu hỏi (?).

Ở đây, tham số name=Nainilake được gắn vào địa chỉ. Nếu bạn muốn thêm nhiều giá trị hơn, chúng ta có thể thêm chúng bằng cách sử dụng ký tự & sau mỗi cặp key-value, tương tự như city=Nainital được thêm bằng cách sử dụng ký tự & sau tham số name. Bây giờ, sau khi nhấp vào hình ảnh của Hồ Nainital, chúng ta muốn trang picture.php được hiển thị với giá trị của tham số được hiển thị cùng với nó.

Lời kết

Vietnix hy vọng nội dung bài viết trên đã giúp bạn hiểu rõ hơn về biến superglobal trong PHP. Ngoài ra, bạn cũng có thể tham khảo thêm các bài viết khác tại vietnix.vn để hiểu hơn về lập trình, chúc bạn thành công!

Cao Lê Viết Tiến

PHP Leader
tại
Vietnix

Kết nối với mình qua

Icon Quote
Icon Quote

Học lập trình online cùng vietnix

Học lập trình online cùng Vietnix

PHPXem thêmThu gọn