Phạm vi của biến (Variable scope)

Admin
01-02-2017

Phạm vi hoạt động của biến là gì ? 

Đó chính là nơi mà biến đã  được định nghĩa khi đọc tài liệu các bạn sẽ thấy họ gọi là scope.

Hầu hết tất cả biến trong PHP đều chỉ có 1 scope duy nhất. sope này cũng bao gồm khi bạn include hoặc require 1 file.

Để rõ hơn mình sẽ trình bày qua các ví dụ sau.

Ví dụ 1:

$variable 1;
include 
'file_one.inc';
?>

Thì scope chúng ta bao gồm cả bên trong file_one.php chúng ta có thể truy cập được biến $variable. Nhưng có một trường hợp đặc biệt ngoại lệ các bạn cần lưu ý là nếu bên trong file_one.php có một function và bên trong này cũng có 1 biến cũng tên $variable thì nó là biến local và hoàn toàn khác với biến $variable 1bên trên. Các bạn xem ví dụ sau:
$variable 1/* global scope */ 

function printVar()

    echo 
$variable/* reference to local scope variable */ 


printVar();
?>

Hàm trên sẽ không in ra bất cứ gì khi được gọi vì biến bên trong hàm là local sope. Biến bên ngoài hàm là global scope mặc dù chúng cùng tên.Qua ví dụ trên chắc các bạn đã hiểu rõ hơn.

A vậy 1 câu hỏi đặt ra tôi muốn sử dụng biến $variable bên trong function thì làm thế nào bây giờ ?

Câu trả lời rất đơn giản có 2 cách:

cách 1 :

$variable_one 1;
$variable_two 2;

function 
Sum()
{
    global 
$variable_one$variable_two;

    
$variable_two $variable_one $variable_two;


Sum();
echo 
$variable_two;

=>Kết quả sẽ là 3 vì bây giờ biến bên trong function cũng giống biến bên ngoài hàm chúng là một.

bạn hãy chú ý mình đã sử dụng từ khóa global nó sẽ giúp biến trở thành scope global bên trong hàm do đó nó sẽ có giá trị như khai báo bên ngoài hàm và bất cứ phép tính toán biến đổi nào tác động bên trong hàm làm thay đổi giá trị của biến thì bên ngoài hàm nó cũng sẽ thay đổi.

Cách 2:

$variable_one 1;
$variable_two 2;

function 
Sum()
{
 
$GLOBALS['variable_two'] = $GLOBALS['variable_one'] + $GLOBALS['variable_two'];



Sum();
echo 
$variable_two;

=>kết quả vẫn là 3 các bạn chú ý mình dùng $GLOBALS['variable_two'] trong đó key chính là tên biến:variable_two  và value chính là giá trị biến.

Như vậy chỉ cần dùng từ global $variable hoặc $GLOBALS['tên biến'] là các bạn có thể sử dụng biến như 1 global scope bên trong hàm.

Mình xin hết hy vọng bài viết ngắn này có thể giúp bạn hiểu thêm về tầm vực của biến.