PHP Variable Scope – Phạm vi Biến trong PHP là gì ?

Trong lập trình, phạm vi của một biến được định nghĩa là phần của chương trình mà nó được xác định và có thể truy cập. Nói cách khác, “phạm vi của một biến là phần của chương trình trong đó nó được xác định và có thể truy cập”. Trong PHP, có ba loại phạm vi biến: biến cục bộ, biến toàn cục và biến tĩnh.

Lập Trình Viên mời bạn cùng tham khảo chi tiết nội dung bên dưới. Bài viết này nằm trong chuyên đề hướng dẫn PHP từ cơ bản đến nâng cao tại dự án Phát Triển Website.

Tổng quan PHP Variable Scope

PHP Variable Scope là một khái niệm quan trọng khi lập trình PHP. Bạn cần hiểu rõ về phạm vi biến để tránh lỗi trong quá trình lập trình.

Biến cục bộ

Các biến được khai báo trong hàm được gọi là biến cục bộ cho hàm đó. Những biến này chỉ có phạm vi ở bên trong hàm và không thể truy cập từ bên ngoài. Điều này có nghĩa là những biến này không thể truy cập bên ngoài hàm, vì chúng có phạm vi cục bộ. Một biến được khai báo bên ngoài hàm với cùng tên là hoàn toàn khác biệt với biến được khai báo trong hàm. Để hiểu rõ hơn về biến cục bộ, chúng ta hãy xem ví dụ sau:

File: local_variable1.php

<?php
function test() {
  $num = 45;
  echo "Local variable declared inside the function is: $num";
}
test();
?>

Output:

Local variable declared inside the function is: 45

File: local_variable2.php

<?php
$num = 5;
function test() {
  $num = 10;
}
test();
echo "Value of num outside the function is: $num";
?>

Output:

Notice: Undefined variable: num in D:\xampp\htdocs\program\p3.php on line 28
Web development language: PHP

Biến toàn cục

Các biến toàn cục là các biến được khai báo bên ngoài hàm. Những biến này có thể truy cập ở bất kỳ đâu trong chương trình. Để truy cập biến toàn cục trong một hàm, sử dụng từ khóa GLOBAL trước biến đó. Tuy nhiên, những biến này có thể truy cập hoặc sử dụng trực tiếp bên ngoài hàm mà không cần sử dụng bất kỳ từ khóa nào để truy cập. Do đó không cần sử dụng bất kỳ từ khóa nào để truy cập biến toàn cục bên ngoài hàm. Hãy hiểu rõ hơn về biến toàn cục với ví dụ sau:

Example: File: global_variable1.php

<?php
$name = "Sanaya Sharma";
function test() {
  global $name;
  echo "Variable inside the function: $name";
}
test();
echo "Variable outside the function: $name";
?>

Output:

Variable inside the function: Sanaya Sharma
Variable outside the function: Sanaya Sharma

Lưu ý: Nếu bạn cố gắng truy cập một biến toàn cục trong hàm mà không sử dụng từ khóa global, chương trình sẽ tạo ra lỗi rằng biến chưa được định nghĩa.

Example: File: global_variable2.php

<?php
$name = "Sanaya Sharma";
function test() {
  echo "Variable inside the function: $name";
}
test();
echo "Variable outside the function: $name";
?>

Output:

Notice: Undefined variable: name in D:\xampp\htdocs\program\p3.php on line 6
Variable inside the function: 
Variable outside the function: Sanaya Sharma

Biến tĩnh

Đây là một tính năng của PHP để xóa biến sau khi hoàn tất thực thi và giải phóng bộ nhớ. Tuy nhiên, đôi khi chúng ta cần lưu trữ một biến ngay cả sau khi thực thi hàm. Do đó, một tính năng quan trọng khác của phạm vi biến là biến tĩnh. Chúng ta sử dụng từ khóa static trước biến để định nghĩa một biến, và biến này được gọi là biến tĩnh. Biến tĩnh chỉ tồn tại trong một hàm cục bộ, nhưng nó không giải phóng bộ nhớ của nó sau khi chương trình rời khỏi phạm vi.

Hãy hiểu rõ hơn về biến tĩnh với ví dụ sau:

Example: File: static_variable.php

<?php
function test() {
  static $num1 = 0;
  $num2 = 0;
  echo "Static: ".$num1++."<br>";
  echo "Non-static: ".$num2++."<br>";
}
test();
test();
?>

Output:

Static: 0
Non-static: 0
Static: 1
Non-static: 0

Bạn cần lưu ý rằng $num1 tăng thường xuyên sau mỗi lần gọi hàm, trong khi $num2 không vậy. Điều này là do $num1 không phải là biến tĩnh, nên nó giải phóng bộ nhớ của nó sau mỗi lần thực thi hàm.

Ví dụ sử dụng PHP Variable Scope

Phạm vi của biến trong PHP là một cách để xác định nơi mà một biến có thể được truy cập. PHP có ba loại phạm vi biến:

  • Phạm vi cục bộ (local scope): Biến cục bộ chỉ có thể được truy cập trong phạm vi mà nó được khai báo.
  • Phạm vi toàn cục (global scope): Biến toàn cục có thể được truy cập từ bất kỳ phạm vi nào trong tập lệnh.
  • Phạm vi tĩnh (static scope): Biến tĩnh có thể được truy cập từ bất kỳ phạm vi nào trong tập lệnh, bao gồm cả các hàm được gọi sau đó.

Phạm vi cục bộ

Biến cục bộ được khai báo bên trong một hàm hoặc khối lệnh. Ví dụ:

function foo() {
  $name = "John Doe";
  echo $name;
}

foo();

Trong ví dụ trên, biến $name chỉ có thể được truy cập trong hàm foo(). Nếu chúng ta cố gắng truy cập biến $name bên ngoài hàm foo(), chúng ta sẽ nhận được lỗi.

Phạm vi toàn cầu

Biến toàn cục được khai báo bên ngoài các hàm và khối lệnh. Ví dụ:

$name = "John Doe";

function foo() {
  echo $name;
}

foo();

Trong ví dụ trên, biến $name có thể được truy cập từ bất kỳ phạm vi nào trong tập lệnh.

Phạm vi tĩnh

Biến tĩnh được khai báo bằng từ khóa static. Biến tĩnh có thể được truy cập từ bất kỳ phạm vi nào trong tập lệnh, bao gồm cả các hàm được gọi sau đó. Ví dụ:

function foo() {
  static $counter = 0;

  $counter++;
  echo $counter;
}

foo();
foo();
foo();

Trong ví dụ trên, biến $counter được khai báo là biến tĩnh. Giá trị của biến $counter sẽ được tăng lên mỗi khi hàm foo() được gọi.

Dưới đây là một số nguyên tắc về phạm vi biến trong PHP:

  • Biến cục bộ có ưu tiên hơn biến toàn cục.
  • Biến tĩnh có ưu tiên hơn biến cục bộ và biến toàn cục.
  • Bạn có thể truy cập biến toàn cục trong hàm bằng cách sử dụng từ khóa global.
  • Bạn có thể truy cập biến cục bộ trong hàm bằng cách sử dụng biến $this.

Phạm vi biến là một khái niệm quan trọng trong PHP. Bạn cần hiểu phạm vi của biến để tránh các lỗi và để viết mã rõ ràng và dễ hiểu.

Ưu và Nhược điểm PHP Variable Scope

Ưu điểm:

  • Quản lý phạm vi biến cho phép bạn kiểm soát các biến được sử dụng trong chương trình và tránh xung đột giữa các biến.
  • Biến cục bộ giúp giảm thiểu việc sử dụng bộ nhớ bằng cách chỉ lưu trữ các biến cần thiết cho mỗi hàm.
  • Biến toàn cục giúp dễ dàng truy cập dữ liệu từ các hàm khác nhau trong chương trình.
  • Biến tĩnh cho ph ương pháp giữ lại giá trị của biến sau khi thực thi hàm.

Nhược điểm:

  • Sử dụng quá nhiều biến toàn cục có thể làm cho chương trình khó hiểu và dễ xảy ra lỗi. Vì vậy, bạn nên sử dụng biến cục bộ hoặc biến tĩnh để giảm thiểu sự phức tạp của chương trình.
  • Sử dụng quá nhiều biến tĩnh có thể làm cho chương trình của bạn chậm hơn do việc giữ lại giá trị của biến trong bộ nhớ.

Lời khuyên PHP Variable Scope

  • Sử dụng biến cục bộ khi bạn chỉ cần lưu trữ giá trị của biến trong một hàm duy nhất.
  • Sử dụng biến toàn cục khi bạn cần truy cập dữ liệu từ nhiều hàm khác nhau trong chương trình.
  • Sử dụng biến tĩnh khi bạn cần lưu trữ giá trị của biến ngay cả sau khi thực thi hàm.
  • Đặt tên biến sao cho dễ hiểu và rõ ràng, tránh sử dụng các tên biến trùng lặp.
  • Hạn chế sử dụng quá nhiều biến toàn cục và biến tĩnh để tránh làm cho chương trình phức tạp.

Tổng kết

Phạm vi biến là một khái niệm quan trọng trong lập trình PHP. Bạn cần hiểu rõ về các loại phạm vi biến: biến cục bộ, biến toàn cục và biến tĩnh để có thể sử dụng chúng một cách hiệu quả trong chương trình của bạn. Hãy đặt tên biến sao cho dễ hiểu và rõ ràng, hạn chế sử dụng quá nhiều biến toàn cục và biến tĩnh để tránh làm cho chương trình phức tạp và khó hiểu. 

1. Biến cục bộ trong PHP có thể được truy cập từ bên ngoài hàm không?

Không, biến cục bộ chỉ tồn tại và được truy cập trong hàm được khai báo.

2. Làm thế nào để truy cập biến toàn cục trong một hàm?

Bạn có thể sử dụng từ khóa global hoặc $GLOBALS để truy cập biến toàn cục trong một hàm.

3. Biến tĩnh trong PHP là gì?

Biến tĩnh là một biến được định nghĩa trong một hàm và giữ lại giá trị của nó ngay cả sau khi thực thi hàm.

4. Tại sao chúng ta nên sử dụng phạm vi biến trong PHP?

Sử dụng phạm vi biến giúp quản lý các biến hiệu quả và tránh xung đột giữa các biến trong chương trình.

5. Làm thế nào để tránh sử dụng quá nhiều biến toàn cục trong PHP?

Bạn nên sử dụng các biến cục bộ và truyền giá trị của chúng vào các hàm khác nhau thay vì sử dụng quá nhiều biến toàn cục.