Cách khai báo biến trong PHP

PHP Tutorial | by Học PHP

Trong lập trình PHP, biến cũng hoạt động y hệt như vậy! Chúng chính là những "ngăn tủ" hay "danh bạ" của chương trình, giúp chúng ta cất giữ và quản lý mọi loại dữ liệu – từ tên người dùng, số lượng sản phẩm, đến trạng thái bật/tắt của một tính năng nào đó. PHP, một trong những ngôn ngữ lập trình web phổ biến nhất hiện nay, sử dụng biến một cách cực kỳ linh hoạt và mạnh mẽ.

Nếu bạn đang bắt đầu tìm hiểu PHP, hoặc đơn giản là muốn củng cố lại kiến thức nền tảng, việc hiểu rõ cách khai báo và sử dụng biến là bước đi đầu tiên và quan trọng nhất. Nó giống như việc bạn học cách mở tủ và đặt đồ vào đúng ngăn vậy! Trong bài viết này, mình sẽ cùng nhau tìm kiếm mọi khía cạnh của biến trong PHP, từ cách đặt tên, các loại dữ liệu mà chúng có thể chứa, cho đến cách tương tác và quản lý chúng một cách hiệu quả. Hãy cùng bắt đầu nhé!

Biến là gì?

Bạn hãy hình dung biến trong lập trình giống như những chiếc hộp rỗng mà bạn có thể dùng để cất giữ mọi thứ. Mỗi chiếc hộp có một cái tên riêng để bạn dễ dàng nhớ và tìm lại khi cần.

Cụ thể hơn:

  • Biến là một vùng nhớ được đặt tên dùng để lưu trữ dữ liệu. Dữ liệu này có thể thay đổi trong suốt quá trình chương trình chạy.
  • Hộp chứa dữ liệu: Giống như một chiếc hộp, biến có thể chứa nhiều loại "đồ vật" khác nhau như số (ví dụ: tuổi của bạn), chữ cái (ví dụ: tên của bạn), hoặc thậm chí là danh sách các món đồ (ví dụ: danh sách mua sắm).
  • Linh hoạt: Giá trị bên trong chiếc hộp (biến) có thể được thay đổi bất cứ lúc nào bạn muốn, đúng như việc bạn có thể lấy đồ này ra và đặt đồ khác vào hộp.

Tầm quan trọng của biến trong lập trình

Biến đóng vai trò cực kỳ quan trọng trong mọi chương trình máy tính, bởi vì:

  • Lưu trữ dữ liệu tạm thời: Biến cho phép chúng ta tạm thời lưu trữ thông tin mà chương trình cần xử lý, ví dụ như dữ liệu nhập từ người dùng, kết quả của một phép tính, hoặc dữ liệu lấy từ cơ sở dữ liệu.
  • Thao tác dữ liệu: Một khi dữ liệu được lưu trong biến, chúng ta có thể dễ dàng thực hiện các phép toán, so sánh, kết hợp hoặc biến đổi dữ liệu đó theo nhiều cách khác nhau.
  • Tái sử dụng: Thay vì phải viết lại một giá trị nhiều lần, chúng ta chỉ cần lưu nó vào một biến và sử dụng tên biến đó ở bất cứ đâu cần đến, giúp code gọn gàng và dễ bảo trì hơn.
  • Tạo ra chương trình động: Nhờ có biến, chương trình của chúng ta có thể phản ứng với các dữ liệu đầu vào khác nhau, thay vì chỉ làm một việc cố định, từ đó tạo ra các ứng dụng linh hoạt và tương tác hơn.

Đặc điểm của biến trong PHP

PHP có một số đặc điểm nổi bật về biến giúp nó trở nên linh hoạt và dễ học:

Ngôn ngữ kiểu động (dynamically typed): Đây là một trong những đặc điểm quan trọng nhất của PHP. Điều này có nghĩa là khi bạn khai báo một biến, bạn không cần phải chỉ rõ nó sẽ chứa loại dữ liệu gì (ví dụ: số nguyên, chuỗi, số thực). PHP sẽ tự động "đoán" kiểu dữ liệu dựa trên giá trị mà bạn gán cho biến đó.

  • Ví dụ: Bạn chỉ cần viết $tuoi = 30; và PHP sẽ tự hiểu $tuoi là một số nguyên. Sau đó, bạn có thể thay đổi $tuoi = "Ba mươi tuổi"; và PHP sẽ tự động chuyển nó thành một chuỗi. Điều này trái ngược với một số ngôn ngữ kiểu tĩnh (statically typed) như Java hay C#, nơi bạn phải khai báo rõ int tuoi = 30; và không thể gán một chuỗi cho biến tuoi đó.

Biến được bắt đầu bằng ký hiệu $: Trong PHP, tất cả các tên biến bắt buộc phải bắt đầu bằng dấu đô la ($). Đây là quy tắc nhận dạng duy nhất cho biến trong PHP, giúp phân biệt biến với các thành phần khác của ngôn ngữ như hằng số hoặc hàm.

  • Ví dụ: $tenNguoiDung, $soLuongSanPham, $giaTriDonHang. Nếu bạn quên dấu $, PHP sẽ không coi đó là một biến và sẽ báo lỗi hoặc hiểu sai ý định của bạn.

Tên biến phân biệt chữ hoa chữ thường (case-sensitive): Điều này có nghĩa là PHP coi $ten$Ten là hai biến hoàn toàn khác nhau.

  • Ví dụ:
<?php
$ten = "An";
$Ten = "Binh";
echo $ten; // Hiển thị "An"
echo $Ten; // Hiển thị "Binh"
?>

Khai báo biến trong PHP

Sau khi đã hiểu biến là gì và tại sao chúng lại quan trọng, bước tiếp theo là biết cách "tạo ra" chúng trong code PHP của bạn. Việc này được gọi là khai báo biến.

Quy tắc đặt tên biến

Đặt tên cho biến cũng giống như việc bạn dán nhãn cho một chiếc hộp vậy. Cái nhãn đó cần phải rõ ràng để bạn biết bên trong chứa gì, và cũng cần tuân theo một vài quy tắc nhất định để máy tính có thể hiểu được.

Trong PHP, các quy tắc đặt tên biến rất quan trọng và bắt buộc phải tuân theo:

Phải bắt đầu bằng ký hiệu $: Đây là điều kiện tiên quyết và đặc trưng nhất của biến trong PHP. Bất kỳ thứ gì không có dấu $ ở đầu sẽ không được PHP nhận diện là một biến.

Ví dụ: $hoTen, $emailNguoiDung, $tongTien.

Ký tự tiếp theo phải là chữ cái (a-z, A-Z) hoặc dấu gạch dưới (_): Sau dấu $ đầu tiên, ký tự tiếp theo không được là số. Nó phải là một chữ cái hoặc dấu gạch dưới.

Đúng: $ten, $_maSanPham.

Sai: $1thongBao (vì bắt đầu bằng số 1).

Các ký tự còn lại có thể là chữ cái, số (0-9) hoặc dấu gạch dưới (_): Sau ký tự thứ hai, bạn có thể thoải mái sử dụng chữ cái, số hoặc dấu gạch dưới để hoàn thiện tên biến của mình.

  • Đúng: $tenDangNhap, $soLuong_SP, $version1_0.

Không được chứa khoảng trắng hoặc các ký tự đặc biệt khác (trừ dấu _): Tên biến không được có dấu cách hoặc các ký tự như -, !, @, #, %, ^, &, *, (, ), +, =, {, }, [, ], |, \, ;, :, <, >, ., /, ?, ,. Dấu gạch dưới (_) là ngoại lệ và thường được dùng để phân tách các từ trong tên biến cho dễ đọc.

  • Sai: $ten san pham (có khoảng trắng), $dia-chi (có dấu gạch ngang), $email@lienhe (có dấu @).

Tóm tắt các ví dụ:

Ví dụ đúng:

<?php
$ten;          // Tên đơn giản
$so_luong;     // Sử dụng dấu gạch dưới để dễ đọc (snake_case)
$giaTriDonHang; // Sử dụng camelCase (ký tự đầu tiên của từ thứ hai viết hoa)
$_maKhachHang; // Bắt đầu bằng dấu gạch dưới
$namSinh1990;  // Có chứa số ở cuối
?>

Ví dụ sai (và lý do):

<?php
// $1ten;            // SAI: Bắt đầu bằng số sau dấu $
// $ten san pham;    // SAI: Chứa khoảng trắng
// $email-khachhang; // SAI: Chứa dấu gạch ngang (-)
// $ho@ten;          // SAI: Chứa ký tự đặc biệt (@)
?>

Cách khai báo biến

Trong PHP, việc khai báo biến cực kỳ đơn giản và trực quan. Bạn không cần một từ khóa đặc biệt để khai báo, cũng không cần chỉ rõ kiểu dữ liệu. Tất cả những gì bạn cần làm là gán một giá trị cho biến ngay khi bạn tạo ra nó.

  • Cú pháp cơ bản:

$tenBien = giaTri;

$tenBien: Là tên mà bạn đã đặt cho biến, tuân thủ các quy tắc trên.

=: Là toán tử gán. Nó dùng để "đặt" giá trị vào biến.

giaTri: Là dữ liệu mà bạn muốn biến đó lưu trữ. Nó có thể là số, chuỗi, boolean, mảng, hoặc bất kỳ loại dữ liệu nào khác.

PHP sẽ tự động xác định kiểu dữ liệu dựa trên giá trị gán: Đây là điểm mạnh của một ngôn ngữ kiểu động như PHP. Khi bạn gán một giá trị, PHP sẽ tự động nhận biết giá trị đó thuộc loại gì (số, chữ, đúng/sai, v.v.) và gán kiểu dữ liệu tương ứng cho biến.

Ví dụ code minh họa:

<?php
// 1. Khai báo biến kiểu số nguyên (Integer)
$soLuong = 100;
echo "Số lượng sản phẩm: " . $soLuong . "<br>"; // Output: Số lượng sản phẩm: 100

// 2. Khai báo biến kiểu số thực (Float/Double)
$giaTien = 19.99;
echo "Giá tiền: " . $giaTien . " USD<br>"; // Output: Giá tiền: 19.99 USD

// 3. Khai báo biến kiểu chuỗi (String)
$tenSanPham = "Laptop Dell XPS";
echo "Tên sản phẩm: " . $tenSanPham . "<br>"; // Output: Tên sản phẩm: Laptop Dell XPS

// 4. Khai báo biến kiểu Boolean
$isAvailable = true; // hoặc false
echo "Sản phẩm có sẵn: " . ($isAvailable ? "Có" : "Không") . "<br>"; // Output: Sản phẩm có sẵn: Có

// 5. Khai báo lại (thay đổi giá trị và kiểu dữ liệu của biến)
$message = "Xin chào"; // ban đầu là chuỗi
echo "Tin nhắn ban đầu: " . $message . "<br>"; // Output: Tin nhắn ban đầu: Xin chào

$message = 12345; // bây giờ là số nguyên
echo "Tin nhắn sau khi thay đổi: " . $message . "<br>"; // Output: Tin nhắn sau khi thay đổi: 12345

// 6. Khai báo biến với giá trị NULL (không có giá trị)
$bienTrong = null;
echo "Giá trị của biến rỗng: " . $bienTrong . "<br>"; // Output: Giá trị của biến rỗng:

?>

Trong ví dụ trên, bạn có thể thấy chúng ta không hề khai báo $soLuongint hay $tenSanPhamstring. PHP tự động hiểu và gán kiểu dữ liệu phù hợp dựa trên giá trị bạn cung cấp. Điều này giúp code PHP trở nên linh hoạt và nhanh chóng hơn cho người phát triển.

Các kiểu dữ liệu cơ bản của Biến trong PHP

Như đã đề cập, PHP là ngôn ngữ kiểu động, nghĩa là bạn không cần khai báo kiểu dữ liệu. Tuy nhiên, mỗi giá trị bạn gán cho biến đều thuộc một kiểu dữ liệu nhất định. Việc hiểu các kiểu dữ liệu này giúp bạn thao tác với chúng một cách chính xác và hiệu quả.

Kiểu số nguyên (Integer)

  • Mô tả: Lưu trữ các số nguyên, tức là các số không có phần thập phân (ví dụ: 1, 100, -50).

  • Ví dụ:

<?php
$tuoi = 30;
$soHocSinh = 250;
$namHienTai = 2025;
echo "Tuổi của bạn là: " . $tuoi . "<br>";
echo "Số học sinh trong trường: " . $soHocSinh . "<br>";
echo "Năm hiện tại: " . $namHienTai . "<br>";
?>

Kiểu số thực (Float/Double)

  • Mô tả: Lưu trữ các số có phần thập phân hoặc số mũ (ví dụ: 3.14, 0.5, 1.2e3). Thường được gọi là float hoặc double trong lập trình.

  • Ví dụ:

<?php
$giaSanPham = 19.99;
$pi = 3.14159;
$nhietDo = 27.5;
echo "Giá sản phẩm: " . $giaSanPham . " USD<br>";
echo "Số Pi: " . $pi . "<br>";
echo "Nhiệt độ hôm nay: " . $nhietDo . " độ C<br>";
?>

Kiểu chuỗi (String)

  • Mô tả: Dùng để lưu trữ văn bản. Chuỗi phải được đặt trong dấu nháy đơn (') hoặc nháy kép (").

  • Ví dụ:

<?php
$hoTen = "Nguyễn Văn A"; // Sử dụng nháy kép
$loiChao = 'Chào mừng bạn đến với PHP!'; // Sử dụng nháy đơn
echo $hoTen . "<br>";
echo $loiChao . "<br>";
?>

Sự khác biệt giữa nháy đơn và nháy kép (nội suy biến):

  • Nháy đơn ('): Không xử lý các ký tự thoát đặc biệt (ngoại trừ '\\) và không nội suy biến. Tức là, nếu bạn đặt tên biến bên trong chuỗi nháy đơn, nó sẽ được hiểu là văn bản thuần túy chứ không phải giá trị của biến.
  • Nháy kép ("): Xử lý các ký tự thoát đặc biệt (như \n cho xuống dòng, \t cho tab) và có khả năng nội suy biến. Nghĩa là, PHP sẽ tìm và thay thế tên biến bằng giá trị của chúng bên trong chuỗi nháy kép.
<?php
$ten = "Quang";
$tuoi = 25;

// Ví dụ với nháy đơn:
echo 'Tên tôi là $ten và tôi $tuoi tuổi.<br>'; // Output: Tên tôi là $ten và tôi $tuoi tuổi.

// Ví dụ với nháy kép:
echo "Tên tôi là $ten và tôi $tuoi tuổi.<br>"; // Output: Tên tôi là Quang và tôi 25 tuổi.
echo "Hôm nay trời đẹp.\nXuống dòng nhé!"; // \n sẽ tạo ra dòng mới

// Sử dụng dấu ngoặc nhọn {} để phân biệt rõ ràng biến trong chuỗi kép (khuyến khích)
echo "Tên tôi là {$ten} và tôi {$tuoi} tuổi.<br>";
?>

Kiểu Boolean (Boolean)

  • Mô tả: Lưu trữ một trong hai giá trị logic: true (đúng) hoặc false (sai). Thường được dùng trong các điều kiện hoặc kiểm tra logic.

  • Ví dụ:

<?php
$isLoggedIn = true; // Người dùng đã đăng nhập
$isAdmin = false;   // Người dùng không phải quản trị viên

if ($isLoggedIn) {
    echo "Chào mừng, bạn đã đăng nhập!<br>";
} else {
    echo "Vui lòng đăng nhập để tiếp tục.<br>";
}

if ($isAdmin) {
    echo "Bạn có quyền truy cập quản trị.<br>";
} else {
    echo "Bạn không có quyền quản trị.<br>";
}
?>

Kiểu mảng (Array)

  • Mô tả: Là một biến đặc biệt dùng để lưu trữ một tập hợp các giá trị có cùng tên biến. Mỗi giá trị trong mảng được truy cập thông qua một chỉ mục (key) hoặc khóa (key). Mảng có thể chứa các kiểu dữ liệu khác nhau.

  • Ví dụ:

<?php
// Mảng số nguyên (indexed array)
$mauSac = array("Đỏ", "Xanh lá", "Xanh dương");
echo "Màu yêu thích của tôi: " . $mauSac[0] . ", " . $mauSac[1] . ", " . $mauSac[2] . "<br>";

// Mảng kết hợp (associative array - sử dụng key là chuỗi)
$thongTinSinhVien = array(
    "ten" => "Trần Thị B",
    "tuoi" => 20,
    "lop" => "K20"
);
echo "Sinh viên: " . $thongTinSinhVien["ten"] . ", Tuổi: " . $thongTinSinhVien["tuoi"] . "<br>";

// Mảng lồng nhau (nested array)
$danhSachSanPham = array(
    array("ID" => 1, "Ten" => "Áo thun", "Gia" => 150000),
    array("ID" => 2, "Ten" => "Quần jean", "Gia" => 300000)
);
echo "Sản phẩm 1: " . $danhSachSanPham[0]["Ten"] . " - " . $danhSachSanPham[0]["Gia"] . " VNĐ<br>";
?>

Kiểu đối tượng (Object)

  • Mô tả: Là một instance (thể hiện) của một lớp (class). Đối tượng cho phép bạn nhóm các dữ liệu (thuộc tính) và chức năng (phương thức) liên quan lại với nhau. Đây là nền tảng của lập trình hướng đối tượng (OOP).

  • Giới thiệu sơ lược: Bạn sẽ tìm hiểu chi tiết hơn về lớp và đối tượng khi đi sâu vào chủ đề Lập trình hướng đối tượng trong PHP. Hiện tại, chỉ cần hiểu rằng nó là một cách tổ chức dữ liệu và hành vi phức tạp.

  • Ví dụ cơ bản (để hình dung):

<?php
class ConNguoi {
    public $ten;
    public $tuoi;

    public function gioiThieu() {
        return "Tôi tên là " . $this->ten . " và tôi " . $this->tuoi . " tuổi.";
    }
}

$nguoi1 = new ConNguoi(); // Khai báo một đối tượng
$nguoi1->ten = "Lê Văn C";
$nguoi1->tuoi = 30;

echo $nguoi1->gioiThieu() . "<br>"; // Output: Tôi tên là Lê Văn C và tôi 30 tuổi.
?>

Kiểu NULL

  • Mô tả: Biến kiểu NULL không chứa bất kỳ giá trị nào. Nó biểu thị sự vắng mặt của một giá trị.

    • Một biến sẽ có giá trị NULL nếu:
      • Bạn gán NULL cho nó một cách rõ ràng.
      • Nó chưa bao giờ được gán giá trị nào.
      • Nó đã bị hủy bằng hàm unset().
  • Ví dụ:

<?php
$bienRong = null;
$bienChuaGanGiaTri; // Biến này cũng sẽ có giá trị NULL nếu chưa được gán.

if (is_null($bienRong)) {
    echo "Biến \$bienRong là NULL.<br>";
}

// Sau khi unset(), biến sẽ trở thành NULL
$tenTaiKhoan = "admin";
unset($tenTaiKhoan);
// if (isset($tenTaiKhoan)) { // Dòng này sẽ không bao giờ được thực thi vì $tenTaiKhoan đã bị unset
//     echo "Tên tài khoản vẫn tồn tại.";
// } else {
//     echo "Tên tài khoản đã bị hủy.";
// }
?>

Kiểu tài nguyên (Resource)

  • Mô tả: Đây là một kiểu dữ liệu đặc biệt không lưu trữ dữ liệu trực tiếp, mà là một tham chiếu (pointer) đến một tài nguyên bên ngoài PHP. Các tài nguyên này có thể là kết nối cơ sở dữ liệu, file đang mở, hoặc hình ảnh.

  • Giới thiệu sơ lược: Bạn sẽ thường gặp kiểu resource khi làm việc với các hàm tương tác với hệ thống file, cơ sở dữ liệu hoặc mạng. PHP tự động quản lý việc giải phóng các tài nguyên này khi chương trình kết thúc hoặc khi không còn cần đến nữa.

  • Ví dụ (để hình dung):

<?php
// Ví dụ về resource khi mở một file
$fileHandle = fopen("data.txt", "r"); // $fileHandle bây giờ là một resource

if (is_resource($fileHandle)) {
    echo "Biến \$fileHandle là một tài nguyên.<br>";
    fclose($fileHandle); // Đóng tài nguyên
}
?>

Ví dụ minh họa Biến trong PHP

Để củng cố tất cả các khái niệm về khai báo và sử dụng biến đã học, chúng ta hãy xem xét một ví dụ thực tế hơn về việc quản lý thông tin khách hàng và sản phẩm trong một hệ thống cửa hàng đơn giản.

<?php

// --- Phần Giới Thiệu Biến ---
echo "<h2>1. Giới Thiệu Biến</h2>";
$appName = "Hệ thống Quản Lý Cửa Hàng Online"; // Biến lưu tên ứng dụng
$version = 1.0;                             // Biến lưu phiên bản
echo "Chào mừng bạn đến với " . $appName . " (Phiên bản " . $version . ")<br>";

// --- Phần Khai Báo Biến ---
echo "<h2>2. Khai Báo Biến</h2>";
// Quy tắc đặt tên và cách khai báo
$tenKhachHang = "Nguyen Thi B"; // camelCase
$_maDonHang = "DH2025-001";     // Bắt đầu bằng gạch dưới
$tongGiaTri = 550000;           // Số nguyên
$tyLeGiamGia = 0.15;            // Số thực
$coKhuyenMai = true;            // Boolean

echo "Khách hàng: " . $tenKhachHang . "<br>";
echo "Mã đơn hàng: " . $_maDonHang . "<br>";
echo "Tổng giá trị đơn hàng: " . $tongGiaTri . " VNĐ<br>";
echo "Tỷ lệ giảm giá: " . ($tyLeGiamGia * 100) . "%<br>";
echo "Có khuyến mãi: " . ($coKhuyenMai ? "Có" : "Không") . "<br>";

// --- Phần Các Kiểu Dữ Liệu Cơ Bản ---
echo "<h2>3. Các Kiểu Dữ Liệu Cơ Bản</h2>";

// Kiểu Chuỗi (String) - ví dụ nháy đơn vs nháy kép
$sanPhamTen = "Bàn phím cơ XYZ";
$moTaNgan = 'Sản phẩm "$sanPhamTen" với nhiều tính năng vượt trội.'; // $sanPhamTen sẽ không được nội suy
$moTaChiTiet = "Sản phẩm \"{$sanPhamTen}\" với nhiều tính năng vượt trội và giá tốt."; // $sanPhamTen được nội suy
echo "Mô tả ngắn (nháy đơn): " . $moTaNgan . "<br>";
echo "Mô tả chi tiết (nháy kép): " . $moTaChiTiet . "<br>";

// Kiểu Mảng (Array)
$danhMucSanPham = ["Điện thoại", "Máy tính", "Phụ kiện"]; // Cú pháp ngắn gọn từ PHP 5.4+
echo "Các danh mục chính: " . $danhMucSanPham[0] . ", " . $danhMucSanPham[1] . ", " . $danhMucSanPham[2] . "<br>";

$thongTinCuaHang = [
    "Ten" => "Shop ABC",
    "DiaChi" => "123 Đường XYZ",
    "DienThoai" => "0901234567"
];
echo "Cửa hàng: " . $thongTinCuaHang["Ten"] . " - Địa chỉ: " . $thongTinCuaHang["DiaChi"] . "<br>";

// Kiểu NULL
$ghiChuKhachHang = null;
if (is_null($ghiChuKhachHang)) {
    echo "Ghi chú khách hàng hiện chưa có.<br>";
}

// --- Phần Sử Dụng Biến ---
echo "<h2>4. Sử Dụng Biến</h2>";

// Gán giá trị và Thao tác số học
$soLuongMua = 2;
$giaMoiSanPham = 250000;
$thanhTien = $soLuongMua * $giaMoiSanPham; // Phép nhân
echo "Thành tiền trước giảm giá: " . $thanhTien . " VNĐ<br>";

// Áp dụng giảm giá
$tongTienSauGiamGia = $thanhTien - ($thanhTien * $tyLeGiamGia);
echo "Tổng tiền sau giảm giá: " . $tongTienSauGiamGia . " VNĐ<br>";

// Phép so sánh và logic
$soDuTaiKhoan = 600000;
if ($tongTienSauGiamGia <= $soDuTaiKhoan && $coKhuyenMai) {
    echo "Đủ tiền và có khuyến mãi, có thể đặt hàng!<br>";
} else {
    echo "Không đủ điều kiện đặt hàng.<br>";
}

// Toán tử tăng/giảm
$soDonHangHomNay = 5;
echo "Số đơn hàng ban đầu: " . $soDonHangHomNay . "<br>";
$soDonHangHomNay++; // Tăng lên 1
echo "Số đơn hàng sau khi thêm: " . $soDonHangHomNay . "<br>";

// Phạm vi biến (Scope)
echo "<h3>Phạm vi biến:</h3>";
$globalVar = "Đây là biến toàn cục.";

function kiemTraPhamVi() {
    global $globalVar; // Khai báo sử dụng biến toàn cục
    echo "Bên trong hàm: " . $globalVar . "<br>"; // Có thể truy cập
    $localVar = "Đây là biến cục bộ.";
    echo "Bên trong hàm: " . $localVar . "<br>";
}

kiemTraPhamVi();
echo "Bên ngoài hàm: " . $globalVar . "<br>"; // Có thể truy cập
// echo "Bên ngoài hàm: " . $localVar . "<br>"; // Lỗi: $localVar không tồn tại ở đây

// Biến Static
function demSoLanTruyCap() {
    static $visits = 0; // Khởi tạo một lần
    $visits++;
    echo "Trang đã được truy cập " . $visits . " lần.<br>";
}
demSoLanTruyCap(); // Lần 1
demSoLanTruyCap(); // Lần 2
demSoLanTruyCap(); // Lần 3

// --- Các hàm hữu ích với biến ---
echo "<h2>5. Các Hàm Hữu Ích Với Biến</h2>";
$thongTinDonHang = [
    "MaDH" => "DH005",
    "SanPham" => ["Laptop", "Mouse"],
    "TongTien" => 15000000
];
$bienChuaDuocTao;

echo "<h3>var_dump() của \$thongTinDonHang:</h3>";
var_dump($thongTinDonHang); // Hiển thị chi tiết mảng và kiểu dữ liệu
echo "<br>";

echo "<h3>isset() và empty() ví dụ:</h3>";
if (isset($thongTinDonHang)) {
    echo "\$thongTinDonHang đã được thiết lập.<br>";
}
if (isset($bienChuaDuocTao)) {
    echo "\$bienChuaDuocTao đã được thiết lập.<br>";
} else {
    echo "\$bienChuaDuocTao CHƯA được thiết lập.<br>";
}

$tenKhachHangNhap = ""; // Giả sử từ input rỗng
if (empty($tenKhachHangNhap)) {
    echo "Tên khách hàng không được để trống (empty).<br>";
}

echo "Kiểu dữ liệu của \$tongGiaTri: " . gettype($tongGiaTri) . "<br>"; // integer

// Bảo mật cơ bản (ví dụ đơn giản)
echo "<h3>Bảo mật cơ bản với dữ liệu người dùng:</h3>";
$userInput = "<script>alert('Nguy hiểm!')</script>Tên của tôi";
$safeOutput = htmlspecialchars($userInput, ENT_QUOTES, 'UTF-8');
echo "Dữ liệu an toàn: " . $safeOutput . "<br>"; // Mã độc đã được mã hóa
?>

Kết bài

Qua bài viết này, mình đã cùng nhautìm hiểu một trong những khái niệm cơ bản nhưng mạnh mẽ nhất trong PHP: biến. Từ việc hiểu biến là gì, cách khai báo theo đúng quy tắc, đến việc nắm vững các kiểu dữ liệu khác nhau mà biến có thể lưu trữ, và cuối cùng là cách thao tác hiệu quả với chúng.

Bạn cũng đã làm quen với các hàm hữu ích giúp kiểm tra, gỡ lỗi biến, cùng với các thực tiễn tốt như đặt tên rõ ràng, khởi tạo biến và đặc biệt là bảo mật dữ liệu đầu vào. Nắm vững những kiến thức này không chỉ giúp bạn viết code hoạt động đúng, mà còn giúp code của bạn dễ đọc, dễ bảo trì và an toàn hơn trước các mối đe dọa.

Biến là xương sống của mọi chương trình PHP. Hãy tiếp tục thực hành, thử nghiệm với các ví dụ khác nhau và đừng ngần ngại tìm hiểu sâu hơn về từng kiểu dữ liệu hoặc các hàm xử lý biến cụ thể khi bạn cần. Việc làm chủ biến sẽ mở ra cánh cửa để bạn xây dựng những ứng dụng web phức tạp và mạnh mẽ hơn với PHP!

Bài viết liên quan