Thuật ngữ "Type Casting" đề cập đến việc chuyển đổi một loại dữ liệu này sang loại dữ liệu khác. Vì PHP là một ngôn ngữ kiểu yếu, trình phân tích cú pháp sẽ ép buộc một số loại dữ liệu thành các loại khác trong khi thực hiện một số phép toán nhất định. Ví dụ, một chuỗi chứa các chữ số sẽ được chuyển đổi thành số nguyên nếu nó là một trong các toán hạng tham gia vào phép toán cộng.
Dưới đây là một ví dụ về ép kiểu cưỡng bức hoặc ép kiểu ngầm -
<?php $a = 10; $b = '20'; $c = $a+$b; echo "c = " . $c; ?>
Trong trường hợp này, $b là một biến chuỗi, được ép kiểu thành số nguyên để cho phép thực hiện phép cộng. Nó sẽ tạo ra output −
c = 30
Hãy xem một ví dụ khác. Ở đây, một biến số nguyên $a được chuyển đổi thành chuỗi để có thể được nối với một biến chuỗi.
<?php $a = 10; $b = '20'; $c = $a.$b; echo "c = " . $c; ?>
Nó sẽ tạo ra output −
c = 1020
Ngoài việc chuyển đổi kiểu dữ liệu cưỡng bức như vậy, còn có những cách khác để chuyển đổi một kiểu dữ liệu này sang kiểu dữ liệu khác một cách rõ ràng. Bạn có thể sử dụng các toán tử chuyển đổi kiểu của PHP hoặc các hàm chuyển đổi kiểu cho mục đích này.
Để chuyển đổi một biểu thức từ kiểu này sang kiểu khác, bạn cần đặt kiểu dữ liệu của kiểu sau trong dấu ngoặc đơn trước biểu thức.
$var = (type)expr;
Một số toán tử ép kiểu trong PHP là −
(int) hoặc (integer) chuyển đổi thành một số nguyên.
(bool) hoặc (boolean) chuyển đổi thành kiểu boolean.
(float) hoặc (double) hoặc (real) chuyển đổi thành kiểu float.
(string) chuyển đổi thành chuỗi
(array) chuyển đổi thành một mảng.
(object) chuyển đổi thành một đối tượng
Bạn có thể dễ dàng chuyển đổi một giá trị float thành một số nguyên. Hãy xem xét đoạn sau example −
<?php $a = 9.99; $b = (int)$a; var_dump($b); ?>
Nó sẽ tạo ra output −
int(9)
Lưu ý rằng giá trị số thực không được làm tròn đến số nguyên gần nhất; thay vào đó, nó chỉ trả về phần nguyên.
Toán tử (int) cũng chuyển đổi một chuỗi thành số nguyên. Việc chuyển đổi rất đơn giản nếu chuỗi chỉ bao gồm các chữ số.
<?php $a = "99"; $b = (int)$a; var_dump($b); ?>
Ở đây, bạn sẽ nhận được output −
int(99)
Ngay cả khi chuỗi chứa một số thực, toán tử (int) chỉ trả về phần nguyên.
Bây giờ hãy lấy một ví dụ khác để hiểu một trường hợp đặc biệt. If the string is alphanumeric, casting with (int) works differently .
Nếu chuỗi bắt đầu bằng các ký tự số theo sau là các ký tự không phải số, chỉ các ký tự số ban đầu được xem xét.
Nếu chuỗi bắt đầu bằng các ký tự không phải số và các chữ số nằm ở giữa, toán tử csting sẽ trả về "0".
Hãy xem xét đoạn sau example −
<?php $a = "10 Rs."; $b = (int)$a; var_dump($b); $a = "$100"; $b = (int)$a; var_dump($b); ?>
Nó sẽ tạo ra output −
int(10) int(0)
Bạn có thể sử dụng toán tử ép kiểu (float) hoặc (double) để chuyển đổi một biến hoặc biểu thức thành kiểu float một cách rõ ràng.
<?php $a = 100; $b = (double)$a; var_dump($b); ?>
Nó sẽ tạo ra output −
float(100)
Một chuỗi chứa bất kỳ biểu diễn số hợp lệ nào có thể được chuyển đổi thành kiểu float bằng cách sử dụng toán tử chuyển đổi.
<?php $a = "100"; $b = (double)$a; var_dump($b); $a = "9.99"; $b = (float)$a; var_dump($b); ?>
Ở đây, bạn sẽ nhận được output −
float(100) float(9.99)
Chuỗi sẽ được chuyển đổi thành số thực (float) ngay cả khi nó chứa ký hiệu khoa học của số thực. Hãy xem ví dụ sau đây −
<?php $a = "1.23E01"; $b = (double)$a; var_dump($b); $a = "5.5E-5"; $b = (float)$a; var_dump($b); ?>
Nó sẽ tạo ra output −
float(12.3) float(5.5E-5)
Tất cả các ký tự không phải số sau các số thập phân sẽ bị bỏ qua. Tương tự, chuỗi sẽ được chuyển đổi thành "0" nếu nó bắt đầu bằng bất kỳ ký tự không phải số nào. Xem ví dụ sau example −
<?php $a = "295.95 only"; $b = (double)$a; var_dump($b); $a = "$2.50"; $b = (float)$a; var_dump($b); ?>
Nó sẽ tạo ra output −
float(295.95) float(0)
Bằng cách sử dụng toán tử ép kiểu, bất kỳ biểu thức nào đánh giá thành kiểu số thực hoặc số nguyên có thể được ép sang kiểu chuỗi. Một vài ví dụ được đưa ra dưới đây −
<?php $a = 100; $b = (string)$a; var_dump($b); $x = 55.50; $y = (string)$x; var_dump($y); ?>
Bạn sẽ nhận được output −
string(3) "100" string(4) "55.5"
Bất kỳ số khác không nào, dù là số nguyên hay số thực, đều được chuyển đổi thành true với toán tử (bool). Một biểu thức có giá trị là "0" trả về false. Một chuỗi luôn được chuyển đổi thành true.
Hãy xem xét đoạn sau example −
<?php $a = 100; $b = (bool)$a; $x = 0; $y = (bool)$x; $m = "Hello"; $n = (bool)$m; var_dump($b); var_dump($y); var_dump($n); ?>
Nó sẽ tạo ra output −
bool(true) bool(false) bool(true)
PHP bao gồm các hàm tích hợp sẵn sau đây để thực hiện việc ép kiểu −
intval()
floatval()
strval()
Hãy thảo luận chi tiết về các hàm tích hợp sẵn này.
Hàm này lấy giá trị số nguyên của một biến.
intval(mixed $value, int $base = 10): int
Tham số $base mặc định là 10, có nghĩa là giá trị được chuyển đổi thành số thập phân.
Nếu giá trị là một số thực, hàm intval() sẽ trả về một số nguyên, bỏ qua phần thập phân.
Một chuỗi đại diện cho một số sẽ trả về một số nguyên tương ứng, bỏ qua phần thập phân, nếu có.
Nếu giá trị là một chuỗi với một số bát phân hợp lệ và cơ sở là 8, hàm intval() sẽ trả về một số bát phân tương ứng.
When the base is "0" , việc chuyển đổi giá trị diễn ra dựa trên tiền tố ký tự.
Nếu giá trị bắt đầu bằng 0X hoặc 0x, một số hệ thập lục sẽ được trả về.
Nếu giá trị bắt đầu bằng 0B hoặc 0b, một số nhị phân sẽ được trả về.
Nếu giá trị bắt đầu bằng 0, hàm sẽ trả về một số bát phân.
Hàm intval() trả về 1 cho giá trị Boolean true và 0 cho giá trị Boolean false.
Ví dụ dưới đây cho thấy cách hoạt động của hàm intval() −
<?php echo intval(42). PHP_EOL; echo intval(4.2). PHP_EOL; echo intval('42') . PHP_EOL; echo intval(042) . PHP_EOL; # 0ctal number echo intval('042', 0) . PHP_EOL; # 0ctal number echo intval('42', 8) . PHP_EOL; # octal echo intval(0x1A) . PHP_EOL; # Hexadecimal echo intval('0x1A', 16) . PHP_EOL; # Hexadecimal echo intval('0x1A', 0) . PHP_EOL; # Hexadecimal echo intval(false) . PHP_EOL; echo intval(true) . PHP_EOL; ?>
Nó sẽ tạo ra output −
42 4 42 34 34 34 26 26 26 0 1
Hàm floatval() lấy giá trị float của một biểu thức.
floatval(mixed $value): float
Giá trị có thể là bất kỳ biến vô hướng nào. Chuỗi có ký tự không phải số sẽ trả về "0". Một chuỗi với đại diện số hoặc với chuỗi con bắt đầu bằng đại diện số sẽ trả về số tương ứng. Dưới đây là example cho thấy cách hoạt động của hàm floatval() −
<?php echo floatval(42). PHP_EOL; echo floatval(4.2). PHP_EOL; echo floatval('42') . PHP_EOL; echo floatval('99.90 Rs') . PHP_EOL; echo floatval('$100.50') . PHP_EOL; echo floatval('ABC123!@#') . PHP_EOL; echo (true) . PHP_EOL; ; echo (false) . PHP_EOL; ?>
Nó sẽ tạo ra output −
42 4.2 42 99.9 0 0 1
Hàm doubleval() là một bí danh của hàm floatval(), do đó trả về kết quả tương tự.
Hàm strval() lấy giá trị chuỗi của một biến. Hàm này không thực hiện bất kỳ định dạng nào trên giá trị được trả về.
strval(mixed $value): string
Giá trị đang được chuyển đổi thành chuỗi có thể là bất kỳ kiểu số nguyên nào, null, hoặc một đối tượng thực hiện phương thức __toString(). Hãy xem xét đoạn sau example −
<?php echo strval(42). PHP_EOL; echo strval(4.2). PHP_EOL; echo strval(4.2E5) . PHP_EOL; echo strval(NULL) . PHP_EOL; echo (true) . PHP_EOL; echo (false) . PHP_EOL; ?>
Nó sẽ tạo ra output −
42 4.2 420000 1
Đoạn văn sau đây example định nghĩa một lớp thực hiện _toString() method .
<?php class myclass { public function __toString() { return __CLASS__; } } echo strval(new myclass); ?>
Ở đây, bạn sẽ nhận được output −
myclass