PHP Variable Scopes – Giới thiệu về phạm vi biến trong PHP

PHP Variable Scopes - Giới thiệu về phạm vi biến trong PHP

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àm say().

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.

Thành Nguyễn

Tôi là Thành, nên tôi đặt tên blog là Thành Nè, Thánh Né... là một coder cùi bắp (Code quèn). Chẳng giỏi viết lách, chỉ giỏi chém gió và có sở thích chia sẻ những kiến thức tôi đã từng...