Khái niệm về biến, khai báo biến trong PHP

Biến là tên thông qua nó giá trị của dữ liệu được lưu giữ và đọc ra từ bộ nhớ trong chương trình PHP. Cú pháp khai báo biến như sau:

$ten_bien = giá_trị_hoặc_biểu_thức_giá_trị;
$nam_sinh = 2000;       // khai báo tên biến và gán bằng một giá trị
$tong = 12 + 8;         // khai báo tên biến và gán bằng giá trị của một biểu thức (20)

Không giống nhiều ngôn ngữ lập trình khác, PHP không có lệnh khai báo biến, biến được tạo ra khi lần đầu tiên tên biến đó được dùng gán giá trị (phép toán gán = ). Tên biến do bạn đặt, dưới đây là các lưu ý về biến:

  • Biến trong PHP được biểu diễn bởi ký tự $ (dollar), sau đó là tên biến
  • Tên biến phân biệt chữ in hoa, in thường
  • Tên biến cũng giống như tên các thành phần trong PHP (hàm, hằng số, lớp ...) cần thỏa mãn: bắt đầu bởi ký tự _ hoặc một ký tự chữ (từ a - z và A - Z của bảng mã ASCII) rồi theo sau là các ký tự chữ, số, hoặc gạch dưới _ (Không được phép có các ký tự đặc biệt ! @ # % ...)
  • Khi bạn khai báo một biến nó luôn cần được gán một giá trị mặc định hoặc một biểu thức giá trị bởi phép gán =
  • Trong PHP có một số biến được định nghĩa sẵn (danh sách tại đây các biến có sẵn), các biến này phải sử dụng đúng mục đích thiết kế của nó. Trong đó biến có tên $this không thực hiện phép toán gán được.
$name = 'Mr A';
$Name = 'Mr ' . 'B';
echo $name, $Name;          // In ra: Mr A, Mr B => biến $name là khác với $Name
$7up = '7UP';               // Tên biến lỗi, không hợp lệ (bắt đầu bằng số)
$_7up = '7UP';              // Tên biến cho phép bắt đầu bằng _
$năm_sinh = 1999;           // Tên lỗi; chứa ký tự chữ ngoài a-z, A-Z.
$$send@someone = true;;     // Tên lỗi; chứa ký tự đặc biệt @

Kiểu dữ liệu của biến trong PHP được xác định tùy thuộc vào giá trị nó đang lưu giữ (giá trị được gán vào biến), nếu gán số nguyên thì biến đó kiểu số nguyên ..., bạn đầu biến kiểu số nhưng sau đó lại gán chuỗi thì kiểu dữ liệu của biến lại chuyển thành chuỗi. Để khám phá về cấu trúc của một biến trong quá trình phát triển bạn có thể dùng lệnh var_dump

$a = 123;
var_dump($a);           // int 123

$a = 'XUANTHULAB';
var_dump($a);           // string 'XUANTHULAB' (length=10)

$a = true;
var_dump($a);           // boolean true

Bạn thấy biến $a, lúc đầu kiểu int, sau đó có kiểu chuỗi string và cuỗi cùng là kiểu boolean (điều này rất linh hoạt khi sử dụng nhưng dễ để lại bug) Xem thêm về các kiểu dữ liệu của PHP.

Biến chứa tên biến trong PHP

Khi bạn viết $$ten_bien thì bạn đang truy cập vào biến, có tên lưu trữ trong $ten_bien.

Khái niệm này dễ gây bối rối, hãy tìm hiểu qua ví dụ:

$store_place = 'hanoi';                 // $store_place có giá trị là 'hanoi'

$$store_place = '100 Sản phẩm';         // Tương đương gán biến $hanoi =  '100 Sản phẩm'

echo $hanoi;                            // In ra: '100 Sản phẩm'
echo $$store_place;                     // In ra: '100 Sản phẩm'
$_bien      = 'abc';
$$_bien     = 'xyz';
$$$_bien    = 'abc';
$$$$_bien   = 'klm';

echo $abc;                              // Theo bạn giá trị trong biến $abc là gi (nội dung xuất ra)

Phạm vi của biến

Sau khi khai báo (tạo ra) một biến, biến đó không hẳn có hiệu lực sử dụng tại mọi nơi của chương trình. Những nơi mà biến có hiệu lực gọi là pham vi của biến (scope), phạm vi của biến như thế nào tùy theo cách tạo ra biến và nơi tạo ra biến. Trong PHP có thể phân ra 4 loại biến theo phạm vi:

  • Các biến cục bộ
  • Các tham số của hàm
  • Các biến toàn cục
  • Các biến tĩnh

Các biến cục bộ

Khi bạn khai báo tạo ra một hàm (xem phần: Hàm trong lập trình PHP), thì các biến đó chỉ có hiệu lực trong nội bộ của hàm, đó là các biến cục bộ.

Biến $a trong hàm và biến $a bên ngoài là khác nhau.

Các tham số hàm

Tham số hàm có thể coi như là một biến cục bộ, có hiệu lực trong nội bộ hàm.

$a = 5;

// Hàm test có tham số $b, nó như là biến cục bộ trong hàm
function test($b)
{
    $a = $b;
    echo '$a trong hàm là: ' . $a;
}

echo test(10);                              // $a trong hàm là: 10
echo '$a ngoài hàm là: ' . $a;;             // $a ngoài hàm là: 5

Biến toàn cục global trong PHP

Khác với biến cục bộ, biến toàn cục truy cập được từ nhiều nơi trong chương trình. Khai báo và sử dụng biến toàn cục thì khi khai báo dùng từ khóa GLOBAL.

$count = 10;

function count() {
    global $count;
    $count++;
    print "$count";
}

count();            // 11
print "$count";     // 11

Biến $count ở trên, ở trong hàm và ngoài hàm là một. Trong chương trình PHP tất cả các biến toàn tục lưu ở mảng định nghĩa sẵn có tên $_GLOBAL, tên biến lưu ở phần key của mảng. Đoạn code sau in ra danh sách các biến toàn cục hiện có trong chương trình của bạn (xem thêm mảng trong php)

foreach ($GLOBALS as $key => $value)
{
    echo '$' . $key . '<br>';
}

Xem thêm: các biến siêu toàn cục (PHP)

Biến tĩnh static PHP

Các biến thông thường khai báo trong hàm nó sẽ bị hủy khi hàm thi hành xong (kết thúc), tuy nhiên nếu khai báo là biến tĩnh thì biến này không bị hủy, có thể dùng lại ở lần gọi tiếp theo của hàm. Khai báo bằng từ khóa static trước tên biến.

Tất nhiên biến này vẫn là cục bộ, chỉ có hiệu lực trong hàm

function count_number() {
    STATIC $count = 0;
    $count++;
    print $count;
    print " ";
}

count_number();
count_number();
count_number();

//OUTPUT: 1 2 3

Đăng ký nhận bài viết mới