Phạm vi của một biến được định nghĩa là phạm vi của nó trong chương trình mà nó có thể được 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 mà trong đó nó được khai báo và có thể được truy cập.”
PHP có ba loại phạm vi biến:
- Biến cục bộ
- Biến toàn cục
- Biến tĩnh
Nội dung chính
1. Biến cục bộ
Các biến được khai báo trong một hàm được gọi là biến cục bộ cho hàm đó. Các biến cục bộ này chỉ có phạm vi trong hàm cụ thể mà chúng được khai báo. Điều này có nghĩa là các biến này không thể được truy cập bên ngoài hàm, vì chúng có phạm vi cục bộ.
Một biến khai báo bên ngoài hàm trùng tên hoàn toàn khác với biến khai báo bên trong hàm. Hãy cùng hiểu các biến cục bộ với sự trợ giúp của một ví dụ:
Tệp: local_variable1.php
<?php
function local_var()
{
$num = 45; //local variable
echo "Local variable declared inside the function is: ". $num;
}
local_var();
?>
Đầu ra:
Local variable declared inside the function is: 45
Tệp: local_variable2.php
<?php
function mytest()
{
$lang = "PHP";
echo "Web development language: " .$lang;
}
mytest();
//using $lang (local variable) outside the function will generate an error
echo $lang;
?>
Đầu ra:
Web development language: PHP
Notice: Undefined variable: lang in D:cafedev\xampp\htdocs\program\p3.php on line 28
2. 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. Các biến này có thể được 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, hãy sử dụng từ khóa GLOBAL trước biến. Tuy nhiên, các biến này có thể được truy cập trực tiếp hoặc sử dụng bên ngoài hàm mà không cần bất kỳ từ khóa nào. Do đó không cần sử dụng bất kỳ từ khóa nào để truy cập một biến toàn cục bên ngoài hàm.
Hãy cùng hiểu các biến toàn cục với sự trợ giúp của một ví dụ:
Thí dụ:
Tệp: global_variable1.php
<?php
$name = "Sanaya Sharma"; //Global Variable
function global_var()
{
global $name;
echo "Variable inside the function: ". $name;
echo "</br>";
}
global_var();
echo "Variable outside the function: ". $name;
?>
Đầu ra:
Variable inside the function: Sanaya Sharma
Variable outside the function: Sanaya Sharma
Lưu ý: Không sử dụng từ khóa global, nếu bạn cố gắng truy cập một biến toàn cục bên trong hàm, nó sẽ tạo ra lỗi rằng biến đó không được khai báo.
Thí dụ:
Tệp: global_variable2.php
<?php
$name = "Cafedev.vn"; //global variable
function global_var()
{
echo "Variable inside the function: ". $name;
echo "</br>";
}
global_var();
?>
Đầu ra:
Notice: Undefined variable: name in D:cafedev\xampp\htdocs\program\p3.php on line 6
Variable inside the function:
Sử dụng $ GLOBALS cho biến toàn cục
Một cách khác để sử dụng biến toàn cục bên trong hàm là dùng cú pháp mảng với biến $GLOBALS đã được khai báo trước.
Thí dụ:
Tệp: global_variable3.php
<?php
$num1 = 5; //global variable
$num2 = 13; //global variable
function global_var()
{
$sum = $GLOBALS['num1'] + $GLOBALS['num2'];
echo "Sum of global variables is: " .$sum;
}
global_var();
?>
Đầu ra:
Sum of global variables is: 18
Nếu hai biến cục bộ và toàn cục, có cùng tên, thì biến cục bộ có mức độ ưu tiên cao hơn so với biến toàn cục bên trong hàm.
Thí dụ:
Tệp: global_variable2.php
<?php
$x = 5;
function mytest()
{
$x = 7;
echo "value of x: " .$x;
}
mytest();
?>
Đầu ra:
Value of x: 7
Lưu ý: biến cục bộ có mức độ ưu tiên cao hơn biến toàn cục.
3. Biến tĩnh(static)
Đó là một tính năng của PHP để xóa biến, sau khi nó hoàn thành việc thực thi và bộ nhớ được giải phóng. Đôi khi chúng ta cần lưu trữ một biến ngay cả sau khi hoàn thành việc 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 để khai báo một biến và biến này được gọi là biến tĩnh .
Các biến static 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 việc thực thi chương trình rời khỏi phạm vi. Hãy cùng Hiểu nó với sự trợ giúp của một ví dụ:
Thí dụ:
Tệp: static_variable.php
<?php
function static_var()
{
static $num1 = 3; //static variable
$num2 = 6; //Non-static variable
//increment in non-static variable
$num1++;
//increment in static variable
$num2++;
echo "Static: " .$num1 ."</br>";
echo "Non-static: " .$num2 ."</br>";
}
//first function call
static_var();
//second function call
static_var();
?>
Đầu ra:
Static: 4
Non-static: 7
Static: 5
Non-static: 7
Bạn sẽ nhận thấy rằng $num1 thường xuyên tăng lên sau mỗi lần gọi hàm, trong khi $num2 thì không. Đây là lý do tại sao vì $num1 không phải là một biến tĩnh, vì vậy nó giải phóng bộ nhớ của nó sau khi thực hiện mỗi lệnh gọi hàm.
Cài ứng dụng cafedev để dễ dàng cập nhật tin và học lập trình mọi lúc mọi nơi tại đây.
Tài liệu từ cafedev:
- Full series tự học PHP từ cơ bản tới nâng cao tại đây nha.
- Ebook về PHP tại đây.
- Các nguồn kiến thức MIỄN PHÍ VÔ GIÁ từ cafedev tại đây
Nếu bạn thấy hay và hữu ích, bạn có thể tham gia các kênh sau của cafedev để nhận được nhiều hơn nữa:
Chào thân ái và quyết thắng!