Biến và kiểu dữ liệu

Khi bắt đầu học lập trình PHP, khái niệm đầu tiên bạn cần nắm vững chính là biến trong PHP. Biến giống như “cái hộp” giúp bạn lưu trữ dữ liệu tạm thời trong quá trình chương trình chạy – từ tên người dùng, điểm số, giá sản phẩm cho đến thông tin phức tạp hơn. Hiểu rõ cách khai báo biến và các kiểu dữ liệu sẽ giúp bạn xây dựng nền tảng vững chắc cho mọi chương trình PHP sau này.

1. Biến trong PHP là gì?

Biến (Variable) là một vùng nhớ có tên, dùng để lưu trữ dữ liệu tạm thời trong chương trình. Bạn có thể hình dung biến như một cái hộp có nhãn, trong đó:

  • Tên biến là nhãn dán trên hộp (để nhận biết)
  • Giá trị là nội dung bên trong hộp (dữ liệu)
  • Kiểu dữ liệu là loại đồ vật trong hộp (số, chữ, true/false…)

1.1. Cú pháp khai báo biến

Trong PHP, mọi biến đều bắt đầu bằng dấu $:

<?php
// Cú pháp: $ten_bien = gia_tri;

$ten = "Nguyễn Văn A";      // Biến lưu tên (chuỗi)
$tuoi = 20;                  // Biến lưu tuổi (số nguyên)
$diem_tb = 8.5;              // Biến lưu điểm (số thực)
$da_dat = true;              // Biến lưu trạng thái (true/false)
?>

💡 Lưu ý: PHP không yêu cầu khai báo kiểu dữ liệu trước (khác với Java, C++). PHP tự động nhận diện kiểu dữ liệu dựa vào giá trị bạn gán.

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

Bắt buộc:

  • ✅ Bắt đầu bằng dấu $
  • ✅ Sau $ phải là chữ cái hoặc dấu gạch dưới _
  • ✅ Có thể chứa chữ cái, số, dấu gạch dưới
  • ✅ Phân biệt hoa thường: $name$Name

Không được:

  • ❌ Bắt đầu bằng số: $1bien
  • ❌ Có ký tự đặc biệt: $ho-ten, $tên@
  • ❌ Có khoảng trắng: $ho ten
  • ❌ Dùng từ khóa PHP: $if, $echo, $class

Ví dụ tên biến hợp lệ:

<?php
$ten_sinh_vien = "An";     // ✅ Dùng snake_case
$diemToan = 9.0;           // ✅ Dùng camelCase
$_private = "data";        // ✅ Bắt đầu bằng _
$HANG_SO = 100;            // ✅ Hằng số viết hoa
$sv2024 = "Khóa mới";      // ✅ Có số ở giữa/cuối

// ❌ Sai
// $2sv = "Lỗi";           // Bắt đầu bằng số
// $ho-ten = "Lỗi";        // Có dấu gạch ngang
?>

KHÁI NIỆM BIẾN TRONG PHP Biến = Cái hộp có nhãn, lưu trữ dữ liệu tạm thời CÁI HỘP 1 $ten Nội dung: "Nguyễn Văn A" Kiểu: String CÁI HỘP 2 $tuoi Nội dung: 20 Kiểu: Integer CÁI HỘP 3 $diem_tb Nội dung: 8.5 Kiểu: Float 💡 PHP tự động nhận diện kiểu dữ liệu dựa vào giá trị
Hình 1: Khái niệm biến trong PHP

2. Các kiểu dữ liệu trong PHP

PHP hỗ trợ 8 kiểu dữ liệu cơ bản, chia làm 3 nhóm chính:

2.1. Kiểu dữ liệu vô hướng (Scalar)

A. String (Chuỗi)

Dùng để lưu văn bản, có thể dùng dấu nháy đơn '...' hoặc nháy kép "...":

<?php
$ten = "Trần Thị B";
$dia_chi = 'Hà Nội';
$mo_ta = "Sinh viên năm 2, học PHP";

// Nháy kép: Có thể chèn biến
$chao = "Xin chào, $ten!"; 
echo $chao; // Kết quả: Xin chào, Trần Thị B!

// Nháy đơn: Không xử lý biến
$chao2 = 'Xin chào, $ten!';
echo $chao2; // Kết quả: Xin chào, $ten!
?>

B. Integer (Số nguyên)

Số không có phần thập phân:

<?php
$tuoi = 21;
$so_sv = 150;
$am = -50;
$lon = 1000000;

// Kiểm tra kiểu
var_dump($tuoi); // int(21)
?>

C. Float/Double (Số thực)

Số có phần thập phân:

<?php
$diem = 8.75;
$gia = 99.99;
$pi = 3.14159;
$khoa_hoc = 1.5e3; // 1.5 x 10^3 = 1500

var_dump($diem); // float(8.75)
?>

D. Boolean (Luận lý)

Chỉ có 2 giá trị: true hoặc false:

<?php
$da_dang_nhap = true;
$co_loi = false;

if ($da_dang_nhap) {
  echo "Chào mừng trở lại!";
}

// Các giá trị tương đương false:
// 0, 0.0, "", "0", null, [], false
?>

2.2. Kiểu dữ liệu phức hợp (Compound)

E. Array (Mảng)

Lưu nhiều giá trị trong một biến:

<?php
// Mảng indexed (chỉ số tự động)
$mon_hoc = ["PHP", "JavaScript", "MySQL"];
echo $mon_hoc[0]; // PHP

// Mảng associative (key-value)
$sinh_vien = [
  "ten" => "Lê Văn C",
  "tuoi" => 19,
  "diem" => 7.5
];
echo $sinh_vien["ten"]; // Lê Văn C
?>

F. Object (Đối tượng)

Dữ liệu theo mô hình OOP (học ở bài 13):

<?php
class SinhVien {
  public $ten;
  public $tuoi;
}

$sv = new SinhVien();
$sv->ten = "Phạm Thị D";
$sv->tuoi = 20;

echo $sv->ten; // Phạm Thị D
?>

2.3. Kiểu đặc biệt (Special)

G. NULL

Biến không có giá trị:

<?php
$rong = null;
$chua_gan;

var_dump($rong);    // NULL
var_dump($chua_gan); // NULL (biến chưa khởi tạo)
?>

H. Resource

Tham chiếu đến tài nguyên bên ngoài (file, database):

<?php
$file = fopen("data.txt", "r");
var_dump($file); // resource(3) of type (stream)
fclose($file);
?>

8 KIỂU DỮ LIỆU TRONG PHP 1. KIỂU VÔ HƯỚNG (Scalar Types) String Chuỗi ký tự "Hello", 'PHP' Integer Số nguyên 10, -5, 1000 Float/Double Số thực (có dấu phẩy) 3.14, 8.5 Boolean Đúng/Sai (luận lý) true, false 2. KIỂU PHỨC HỢP (Compound Types) Array Mảng (nhiều giá trị) [1, 2, 3] Object Đối tượng (OOP) new Class() 3. KIỂU ĐẶC BIỆT (Special Types) NULL Không có giá trị Resource Tài nguyên (file, DB)
Hình 2: Bảng tổng hợp kiểu dữ liệu PHP

3. Kiểm tra và chuyển đổi kiểu dữ liệu

3.1. Kiểm tra kiểu dữ liệu

<?php
$so = 100;
$chu = "Hello";

// Hàm var_dump() - Hiển thị kiểu và giá trị
var_dump($so);  // int(100)
var_dump($chu); // string(5) "Hello"

// Hàm gettype() - Trả về tên kiểu
echo gettype($so);  // integer
echo gettype($chu); // string

// Hàm is_*() - Kiểm tra kiểu cụ thể
var_dump(is_int($so));    // bool(true)
var_dump(is_string($so)); // bool(false)
var_dump(is_float(3.14)); // bool(true)
var_dump(is_bool(true));  // bool(true)
var_dump(is_array([1,2])); // bool(true)
?>

3.2. Chuyển đổi kiểu dữ liệu

Cách 1: Ép kiểu tường minh (Type Casting)

<?php
$chuoi = "123";
$so = (int)$chuoi;     // Ép thành số nguyên
var_dump($so);         // int(123)

$thuc = (float)"45.67";
var_dump($thuc);       // float(45.67)

$bool = (bool)1;
var_dump($bool);       // bool(true)

$mang = (array)"text";
var_dump($mang);       // array(1) { [0]=> string(4) "text" }
?>

Cách 2: Dùng hàm chuyển đổi

<?php
$chuoi = "789";

$so = intval($chuoi);      // Thành integer
$thuc = floatval($chuoi);  // Thành float
$chu = strval(456);        // Thành string

echo $so;   // 789 (kiểu int)
echo $thuc; // 789.0 (kiểu float)
echo $chu;  // "456" (kiểu string)
?>

⚠️ Lưu ý: Chuyển đổi không hợp lệ có thể cho kết quả sai:
(int)"abc" → 0
(int)"10abc" → 10
(bool)"" → false
(bool)"0" → false

4. Phạm vi biến (Variable Scope)

Phạm vi biến (scope) quyết định nơi biến có thể được truy cập trong code.

4.1. Biến toàn cục (Global)

Khai báo ngoài hàm, truy cập ở mọi nơi (trừ trong hàm):

<?php
$bien_toan_cuc = "Tôi là global";

function hienThi() {
  // ❌ Không thể dùng trực tiếp
  // echo $bien_toan_cuc; // Lỗi!
  
  // ✅ Phải dùng từ khóa global
  global $bien_toan_cuc;
  echo $bien_toan_cuc; // OK
}

hienThi();
?>

4.2. Biến cục bộ (Local)

Khai báo trong hàm, chỉ dùng được trong hàm đó:

<?php
function tinhTong() {
  $a = 10;  // Biến cục bộ
  $b = 20;  // Biến cục bộ
  $tong = $a + $b;
  echo $tong; // 30
}

tinhTong();

// ❌ Không truy cập được từ ngoài
// echo $a; // Lỗi: Undefined variable
?>

4.3. Biến tĩnh (Static)

Giữ giá trị giữa các lần gọi hàm:

<?php
function demSo() {
  static $dem = 0; // Chỉ khởi tạo 1 lần
  $dem++;
  echo $dem . " ";
}

demSo(); // 1
demSo(); // 2
demSo(); // 3
// Biến $dem giữ giá trị sau mỗi lần gọi
?>

4.4. Biến siêu toàn cục (Superglobals)

PHP cung cấp sẵn các biến toàn cục đặc biệt:

<?php
// $_GET - Dữ liệu từ URL
// $_POST - Dữ liệu từ form
// $_SESSION - Lưu session
// $_COOKIE - Lưu cookie
// $_SERVER - Thông tin server
// $_FILES - File upload

// Ví dụ: Lấy thông tin server
echo $_SERVER['HTTP_HOST'];      // localhost
echo $_SERVER['REQUEST_METHOD']; // GET hoặc POST
?>

PHẠM VI BIẾN: GLOBAL vs LOCAL GLOBAL SCOPE (Toàn cục) Khai báo ngoài hàm, truy cập ở mọi nơi (trừ trong hàm) $bien_toan_cuc = 100; ✅ Dùng được ở mọi nơi (ngoài file PHP) function myFunction() { LOCAL SCOPE (Cục bộ) $bien_cuc_bo = 20; ✅ Chỉ dùng được trong hàm này ❌ Không truy cập được từ bên ngoài } Muốn dùng trong hàm: global $bien_toan_cuc; Cần từ khóa global 💡 Superglobals ($_GET, $_POST...) dùng được mọi nơi không cần global
Hình 3: Phạm vi biến Global vs Local

5. Hằng số (Constants)

Hằng số là biến đặc biệt có giá trị không thay đổi sau khi khai báo:

<?php
// Cách 1: Hàm define()
define("TEN_TRUONG", "ĐH Bách Khoa");
define("SO_SV_TOI_DA", 1000);

echo TEN_TRUONG;    // ĐH Bách Khoa
echo SO_SV_TOI_DA;  // 1000

// Cách 2: Từ khóa const (PHP 5.3+)
const PI = 3.14159;
const WEBSITE = "laptrinhkhongkho.com";

echo PI;      // 3.14159
echo WEBSITE; // laptrinhkhongkho.com

// ❌ Không thể thay đổi
// PI = 3.14; // Lỗi!
?>

💡 Quy ước: Tên hằng số thường viết HOA, dùng dấu gạch dưới phân tách từ.

6. Biến biến (Variable Variables)

Dùng giá trị của biến này làm tên biến khác:

<?php
$ten = "tuoi";
$$ten = 21; // Tạo biến $tuoi = 21

echo $tuoi; // 21
echo $$ten; // 21 (giống $tuoi)

// Ví dụ thực tế
$loai = "diem_toan";
$$loai = 9.0;

echo $diem_toan; // 9.0
?>

7. So sánh biến: == vs ===

PHP có 2 cách so sánh:

<?php
$a = 10;
$b = "10";

// == So sánh giá trị (tự động chuyển kiểu)
var_dump($a == $b);  // bool(true)

// === So sánh giá trị VÀ kiểu dữ liệu
var_dump($a === $b); // bool(false)

// Ví dụ khác
$x = 0;
$y = false;

var_dump($x == $y);  // true (0 tương đương false)
var_dump($x === $y); // false (int ≠ bool)
?>

💡 Khuyến nghị: Dùng === để tránh lỗi logic do chuyển kiểu tự động.

Tóm tắt

Qua bài này bạn đã nắm được:

  • Biến trong PHP là vùng nhớ lưu trữ dữ liệu, bắt đầu bằng $
  • ✅ Quy tắc đặt tên: Chữ cái/gạch dưới đầu, phân biệt hoa thường, không dùng từ khóa
  • 8 kiểu dữ liệu: String, Integer, Float, Boolean, Array, Object, NULL, Resource
  • ✅ Kiểm tra kiểu: var_dump(), gettype(), is_int()
  • ✅ Chuyển đổi kiểu: (int), (float), intval(), floatval()
  • Phạm vi biến: Global, Local, Static, Superglobals
  • ✅ Hằng số: define() hoặc const, không đổi giá trị
  • ✅ So sánh: == (giá trị) vs === (giá trị + kiểu)

Bài tiếp theo, bạn sẽ học về toán tử trong PHP để thực hiện các phép tính và xử lý logic.

🎯 Bài tập thực hành

  1. Bài 1: Khai báo các biến lưu thông tin sách: tên sách, tác giả, giá (số thực), số trang (số nguyên). In ra màn hình đầy đủ thông tin.
  2. Bài 2: Tạo 2 biến $a = "100"$b = 50. Chuyển $a thành số nguyên, tính tổng và in kết quả.
  3. Bài 3: Viết code kiểm tra biến $diem = 7.5 có phải kiểu float không. In ra “Đúng” hoặc “Sai”.

Gợi ý Bài 1:

<?php
$ten_sach = "Lập trình PHP căn bản";
$tac_gia = "Nguyễn Văn A";
$gia = 199.5;
$so_trang = 350;

echo "<h3>Thông tin sách</h3>";
echo "Tên: $ten_sach<br>";
echo "Tác giả: $tac_gia<br>";
echo "Giá: " . number_format($gia, 0, ',', '.') . " VNĐ<br>";
echo "Số trang: $so_trang<br>";
?>

Gợi ý Bài 2:

<?php
$a = "100";
$b = 50;

$a = (int)$a; // Hoặc: $a = intval($a);
$tong = $a + $b;

echo "Tổng: $tong"; // 150
?>

Gợi ý Bài 3:

<?php
$diem = 7.5;

if (is_float($diem)) {
  echo "Đúng";
} else {
  echo "Sai";
}
?>

Để lại bình luận

Email của bạn sẽ không được hiển thị.