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

Trong PHP hiện tại cung cấp 10 loại kiểu dữ liệu ban đầu, kiểu dữ liệu được dùng để xác định loại dữ liệu lưu trữ trong biến, trong tham số hàm, dữ liệu trả về từ biểu thức, hàm ... Bảng sau tóm tắt các kiểu dữ liệu trong php:

Bảng các kiểu dữ liệu ban đầu trong PHP
Tên kiểu Mô tả
Nhóm các kiểu dữ liệu đơn giản (scalar)
int

Kiểu số nguyên , tùy thuộc vào hệ thống 32/64 bít mà có thể chiếm 4 hay 8 byte (hằng số PHP_INT_SIZE). Số nguyên lớn nhất và nhỏ nhất biểu diễn được lấy qua hằng số PHP_INT_MAX và PHP_INT_MIN. Trong PHP bạn có thể nhập số nguyên ở cơ số 10 (dec), 16(hex), 8(octa) kể cả cơ số 2 (nhị phân).

$number = 2233;         // Số nguyên thập phân (chủ yếu bạn viết ở dạng này).
$number = 1_234_567;    // Số nguyên thập phần từ PHP 7.4 có thể dùng _ để phân nhóm (12345678)
$number = 0123;         // Viết 0 đầu tiên, thì đó là số nguyên ở dạng bát phân octa
$number = 0o123;        // Bát phân trong PHP 8.1 có thể bắt đầu bởi 0O, 0o
$number = 0x1A;         // Số hex (cơ số 16) viết bắt đầu bởi 0x
$number = 0b11111111;   // Số nhị phân bắt đầu bở 0b

Convert các cơ số: Trong PHP có các hàm để lấy chuỗi biểu diễn số ở các dạng cơ số khác nhau:

/*
    bindec(), decbin() : convert giữa thập phân và nhị phân
    octdec(), decoct() : convert giữa octal và thập phân
    dechex(), hexdec() : convert giữa thập phân và hex
    base_convert()     : convert giữa các cơ số
*/
echo dechex(2020);                  // Chuỗi từ số thập phân sang hex (không gồm 0x): 7e4
echo hexdec('fff');                 // Số dạng hex (không 0x) chuyểng sang số thập phân


$number = 'fff';                    # chuỗi biểu diễn số nguyên cơ số 16
echo base_convert($number, 16, 2);  # Chuyển từ cơ số 16 sang nhị phân (111111111111)

Một giá trị số nguyên vượt quá khả năng biểu diễn của nó, PHP có thể chuyển nó về kiểu số thực float.

$number = PHP_INT_MAX;
$number = $number + 1;  // cộng hai số nguyên
var_dump($number);      // float 9.2233720368548E+18 : kết quả là số thực do tràn số
float

Kiểu số thực trong PHP (số thực dấu chấm động - float hoặc double): được nhập vào với dấu châm, phân tách phần nguyên và thập phân, ví dụ

$PI = 3.14
boolean

Kiểu số logic boolean : Boolean thì chỉ nhận hai giá trị là biểu diễn đúng/sai, on/off ... là truefalse

if (TRUE)
     print("Hello
"); else print("Never out
");

Khi cần convert một kiểu dữ liệu khác (int, string ...) sang boolean đúng - sai phụ thuộc vào giá trị của dữ liệu đó, nó nhận false khi:

  • Số bằng 0
  • Chuỗi rỗng (không có ký tự nào) hoặc có một ký tự thì là ký tự '0' thì là false.
  • Nếu là NULL thì luôn là false.
  • Nếu biến là mảng thì nếu mảng trống (không có phần tử) thì false, còn lại nếu có phần từ thì là true.
  • Nếu biến tài nguyên có true là có hiệu lực, false là không.
  • Cuối cùng là đừng có dùng kiểu số thực như là bolean. Chả biết khi nào true, false.

Các trường hợp khác convert thì nhận true

$test = (bool)'';
var_dump($test);    // boolean false
string

Kiểu chuỗi (xâu) ký tự : Chuối ký tự là tập hợp các ký tự tạo thành dòng chữ, dòng text, văn bản. Chi tiết về chuỗi ký tự xem tại: chuỗi ký tự trong PHP

Nhóm các kiểu dữ liệu phức tạp (compound)
array

Mảng - array là dữ liệu có cấu trúc, chứa thông tin ánh xạ giữa các key(khóa) và giá trị (value). Về mảng và các phép toán trên mảng xem chi tiết tại: Mảng trong PHP

object

Kiểu object: Đối tượng đó là thực thể do PHP sinh ra từ các định nghĩa lớp, thực thể này có thể chứa trong nó dữ liệu và các hàm thi hành. Object liên quan đến lập trình OOP, xem chi tiết tại: Hướng đối tượng trong PHP

Chuyển kiểu sang object : đối tượng object là tham chiếu (không phải tham trị), trong PHP các kiểu dữ liệu khác có thể chuyển về object với cú pháp:

$ob = (object)$value;

Nó sẽ tạo ra một object lớp đặc biệt stdClass có thuộc tính phụ thuộc vào giá trị convert. Ví dụ các biến scalar (đơn giản) thì object có thuộc tính scalar, mảng thì có thuộc tính là các key

$ob = (object)"XuanThuLab";     // Covert chuỗi sang object
    var_dump($ob);
                                    // object(stdClass)[503]
                                    //        public 'scalar' => string 'XuanThuLab'
    echo $ob->scalar;               // XuanThuLab
$ob = (object)[1,2,3];     // Covert mảng sang object
var_dump($ob);
/*
object(stdClass)[503]
  public '0' => int 1
  public '1' => int 2
  public '2' => int 3
*/
callable

Kiểu callable: Tham chiếu tới đối tượng có thể gọi thực thi, gọi là các callback. Kiểu này thường dùng khai báo trong tham số hàm, kiểu trả về. Chi tiết về callback/callable xem tại: Sử dụng Callback, Callable

// Khai báo hàm có tham số callable
function tinhtoan(callable $pheptoan, $number)
{
    echo 'Kết quả là: ' . $pheptoan($number);
}

tinhtoan('sqrt', 100);      // In ra căn bậc 2 của 100
iterable

Kiểu iterable: (Duyệt qua được), đây là kiểu có thề dùng với vòng lặp foreach, tất cả các đối tượng triển khai từ Traversable hoặc các mảng xếp vào kiểu này.

// Khai báo hàm trả về kiểu iterable
function test(): iterable {
    return ['MON', 'TUE' 'WED'];
}
Nhóm các kiểu dữ đặc biệt
resource

Kiểu resource Biến kiểu dữ liệu resource nó nắm giữ thông tin tham chiếu tới các tài nguyên ngoài phạm vị PHP (như kết nối dữ liệu, kết nối mạng ...)

NULL

Đây là kiểu dữ liệu đặc biệt, cho biết biến chẳng có giá trị nào. Một biến có thể nhận null khi:

$yourvar = null;            // gán bằng null

$name = 'XUANTHULAB';
unset($name);               // gọi hàm unset với biến

Một biến là NULL thì có ý nghĩa sử dụng sau:

  • Trong toán tử Logic nó là FALSE.
  • Kiểm tra bằng hàm isset() nó trả về FALSE.

Kiểu dữ liệu phức tạp thì có thể mang trong nó các kiểu dữ liệu khác còn kiểu đơn giản thì không.

Sự lỏng lẻo của kiểu dữ liệu trong PHP

Một biến trong PHP không có kiểu cố định, kiểu của nó phụ thuộc vào giá trị dữ liệu nó đang lưu trữ. Biến đang ở kiểu này, nếu gán giá trị kiểu khác thì biến sẽ có kiểu dữ liệu thay đổi theo. Khi giá trị gán vào một biến, PHP sẽ có gắng convert dữ liệu sao cho phù hợp tùy thuộc từng ngữ cảnh: số, chuỗi, giá trị logic ...

Chuyển thành số : trong biểu thức sử dụng các phép toán số học + - * / ... thì giá trị của biến sẽ cố gắng chuyển thành số:

$a = "5";           // Chuỗi ký tự "5"
$b = 6;
echo $a * $b;       // in ra 30; nó đã chuyển chuỗi "5" thành số 5

Chuyển thành chuỗi : khi bạn sử dụng các hàm có tham số là chuỗi (như echo, print ..), các phép toán về chuỗi (như nối chuỗi .) thì giá trị lưu trong biến (dù là kiểu gì) thì PHP sẽ cố gắng chuyển nó thành chỗi.

$number = 123.1234;                                  // số kiểu float
echo str_replace('3.1234', '4.321', $number);        // in ra: 124.321; $number tự convert thành chuỗi

Chuyển thành kiểu logic bool : nếu biểu thức sử dụng các phép toán logic (và, hoặc ...), hay tham số hàm cần kiểu logic, nếu biến xuất hiện tại đây nó sẽ được tự động chuyển sang boolean.

$var = 1;
if ($var == true)
{
    echo 'It\'s true';
}

Chuyển thành kiểu logic bool : nếu biểu thức sử dụng các phép toán logic (và, hoặc ...), hay tham số hàm cần kiểu logic, nếu biến xuất hiện tại đây nó sẽ được tự động chuyển sang boolean.

Ép kiểu chuyển kiểu với PHP

Nếu bạn cần ép kiểu (casting) chuyển kiểu về một kiểu cụ thể do bạn chỉ ra thì sử dụng cú pháp như sau:

$result = (typecast)$value

Trong đó: typecast có thể là: int (hoặc integer) bool (hoặc boolean) float (hoặc double) string (hoặc binary) array object

    $a = 2000.2020;     // $a kiểu float
    $b = (int)$a;       // ép về kiểu int

    var_dump($b);       // int 2000

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