Scope của biến

Scope của biến

Scope là tầm vực hoạt động của biến. Trong PHP biến có scope là ngữ cảnh mà nó định nghĩa. Một biến tron PHP thông thường có scope là trong file đó và các file include (hay được gọi là global scope).

1
2
3
<?php
$a = 10; // global scope
include 'b.php'; // biến $a cũng có thể truy cập trong file b.php 

Tuy nhiên khi khai báo hàm thì biến được có scope là hàm đó.

1
2
3
4
5
6
7
<?php
$a = 10; // global scope

function test() { 
  echo $a; // không thể truy cập biến $a ở ngoài
}
test();

Biến global

Để sử dụng biến global thì hãy sử dụng từ khóa global hoặc sử dụng mảng $GLOBALS.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
<?php
$a = 10; // global scope

function test() { 
  global $a; // khai báo biến $a sử dụng scope global

  echo $a . ' '; // chuyển $a thành string rồi nối xâu
  echo $GLOBALS['a'] * 2;
}
test(); // -> 10 20

Biến static

Biến static là biến tĩnh chỉ khởi tạo một lần khi gọi hàm, khi gọi hàm các lần tiếp theo sẽ không khởi tạo lại biến. Giá trị của biến không mất đi khi lời gọi hàm kết thúc.

1
2
3
4
5
6
7
8
9
<?php
function test() {
  static $a = 0;
  echo $a . ' ';
  $a++;
}
test(); // -> 0
test(); // -> 1
test(); // -> 2

Biến của biến (Variable variables)

Variable variables là cách chuyển string thành tên biến sử dụng hai dấu dollar $$.

1
2
3
4
5
6
7
8
<?php
$a = 'hello';
$hello = 2020;

// tương đương với echo $hello
echo ${'hello'} . '\n'; // -> 2020
echo ${$a} . '\n'; // -> 2020
echo $$a . '\n'; // -> 2020