PHP Variable Scopes trong bài hướng dẫn này, bạn sẽ biết về phạm vi biến trong PHP, xác định phần mã code nào có thể truy cập vào một biến.
Giới thiệu về phạm vi biến (Variable Scopes) trong PHP
Phạm vi của một biến xác định phần mã code nào có thể truy cập vào nó. Những vị trí mà biến có thể truy cập xác định phạm vi của biến.
Trong PHP, biến có bốn loại phạm vi:
- Cục bộ (Local)
- Toàn cục (Global)
- Tĩnh (Static)
- Tham số hàm (Function parameters)
Biến cục bộ (Local variables)
Khi bạn định nghĩa một biến bên trong một hàm, bạn chỉ có thể truy cập vào biến đó bên trong hàm. Và nó được gọi là biến cục bộ của hàm.
Ví dụ sau đây định nghĩa hàm say()
hiển thị thông điệp 'Hi'
:
<?php function say() { $message = 'Hi'; echo $message; }
Bên trong hàm say()
, chúng ta định nghĩa biến $message
. Biến $message
là biến cục bộ và bạn không thể truy cập vào nó bên ngoài hàm say()
.
Ngoài ra, biến $message
chỉ tồn tại trong quá trình thực thi của hàm say()
. Khi hàm say()
kết thúc, biến $message
sẽ không tồn tại nữa.
Biến toàn cục (Global variables)
Khi bạn khai báo một biến bên ngoài hàm, biến đó là toàn cục. Điều đó có nghĩa là bạn có thể truy cập vào biến đó bất kỳ đâu trong mã script ngoại trừ bên trong hàm. Ví dụ:
<?php $message = 'Hello'; function say() { $message = 'Hi'; echo $message; } echo $message; // Hello
Trong mã script này, chúng ta có hai biến cùng tên $message
.
Biến đầu tiên là biến toàn cục vì chúng ta định nghĩa nó bên ngoài hàm. Biến $message
được định nghĩa bên trong hàm là biến cục bộ. Dù những biến này có cùng tên, chúng là hai biến khác nhau.
PHP cho phép bạn truy cập vào biến toàn cục trong hàm bằng cách sử dụng từ khóa global
. Ví dụ:
<?php $message = 'Hello'; function say() { global $message; echo $message; // Hello } say();
Cách hoạt động.
- Đầu tiên, định nghĩa một biến toàn cục có tên
$message
. - Tiếp theo, tham chiếu vào biến toàn cục
$message
bên trong hàmsay()
.
Lưu ý quan trọng rằng việc sử dụng biến toàn cục không phải là một thực hành tốt.
Biến siêu toàn cục (Superglobal variables)
PHP có một danh sách các biến tích hợp sẵn, được gọi là biến siêu toàn cục. Những biến siêu toàn cục cung cấp thông tin về môi trường script PHP.
Các biến siêu toàn cục luôn có sẵn trong tất cả các phần của script. Bảng dưới đây hiển thị danh sách các biến siêu toàn cục trong PHP:
Biến Siêu Toàn Cục | Ý nghĩa |
---|---|
$GLOBALS | Trả về một mảng chứa các biến toàn cục. Tên biến được sử dụng để chọn phần nào của mảng để truy cập. |
$_SERVER | Trả về thông tin về môi trường máy chủ web. |
$_GET | Trả về dữ liệu từ yêu cầu GET . |
$_POST | Trả về dữ liệu từ yêu cầu POST . |
$_COOKIE | Trả về dữ liệu từ cookie HTTP |
$_FILES | Trả về dữ liệu từ việc tải lên tệp thông qua POST . |
$_ENV | Trả về thông tin về môi trường của script. |
$_REQUEST | Trả về dữ liệu từ yêu cầu HTTP |
$_SESSION | Trả về các biến đã đăng ký trong một phiên |
Biến tĩnh (Static variables)
Nó giá trị của nó giữa các lần gọi hàm. Biến tĩnh chỉ có thể truy cập bên trong hàm. Để định nghĩa một biến tĩnh, bạn sử dụng từ khóa static
. Ví dụ:
<?php function get_counter() { static $counter = 1; return $counter++; } echo get_counter() . '<br>'; // 1 echo get_counter() . '<br>'; // 2 echo get_counter() . '<br>'; // 3
Output:
1 2 3
Cách hoạt động.
- Đầu tiên, định nghĩa hàm
get_counter()
với một biến tĩnh có tên$counter
. - Tiếp theo, gọi hàm
set_counter()
ba lần. Bạn sẽ thấy giá trị của biến$counter</code tăng lên một sau mỗi lần gọi hàm.
Tham số hàm (Function parameters)
Tham số hàm chỉ có thể truy cập bên trong hàm. Do đó, tham số hàm chỉ có thể truy cập bên trong hàm. Ví dụ:
<?php function sum($items) { $total = 0; foreach($items as $item) { $total += $item; } return $total; } // $items không thể truy cập ở đây echo sum([10,20,30]);
Trong ví dụ này, $items
là tham số của hàm sum()
. Chỉ có thể truy cập vào $items
bên trong hàm sum()
.
Tóm tắt
- PHP có bốn loại phạm vi biến bao gồm cục bộ, toàn cục, tĩnh, và tham số hàm.