PHP được biết đến là một ngôn ngữ có kiểu dữ liệu động. Kiểu của một biến trong PHP thay đổi một cách linh hoạt. Tính năng này được gọi là "type juggling" trong PHP.
Trong C, C++ và Java, bạn cần khai báo biến và kiểu của nó trước khi sử dụng trong mã tiếp theo. Biến có thể nhận giá trị phù hợp với kiểu đã khai báo.
Khai báo kiểu rõ ràng cho một biến là không cần thiết và cũng không được hỗ trợ trong PHP. Do đó, kiểu của biến PHP được xác định bởi giá trị được gán cho nó, chứ không phải theo cách khác. Hơn nữa, khi một biến được gán giá trị của kiểu khác, kiểu của nó cũng sẽ thay đổi.
Hãy xem xét việc gán biến sau đây trong PHP.
<?php $var = "Hello"; echo "The variable \$var is of " . gettype($var) . " type" .PHP_EOL; $var = 10; echo "The variable \$var is of " . gettype($var) . " type" .PHP_EOL; $var = true; echo "The variable \$var is of " . gettype($var) . " type" .PHP_EOL; $var = [1,2,3,4]; echo "The variable \$var is of " . gettype($var) . " type" .PHP_EOL; ?>
Nó sẽ tạo ra output −
The variable $var is of string type The variable $var is of integer type The variable $var is of boolean type The variable $var is of array type
Bạn có thể thấy kiểu của "$var" thay đổi động theo giá trị được gán cho nó. Tính năng này của PHP được gọi là "type juggling".
Việc chuyển đổi kiểu dữ liệu cũng diễn ra trong quá trình tính toán biểu thức. Trong ví dụ này, một biến chuỗi chứa các chữ số sẽ tự động được chuyển đổi thành số nguyên để đánh giá biểu thức cộng.
<?php $var1=100; $var2="100"; $var3=$var1+$var2; var_dump($var3); ?>
Dưới đây là output của nó −
int(200)
Nếu một chuỗi bắt đầu bằng các chữ số, các ký tự không phải số ở phía sau (nếu có) sẽ bị bỏ qua trong quá trình thực hiện phép tính. Tuy nhiên, trình phân tích cú pháp PHP sẽ phát ra một thông báo như dưới đây −
<?php $var1=100; $var2="100 days"; $var3=$var1+$var2; var_dump($var3); ?>
Bạn sẽ nhận được output −
int(200) PHP Warning: A non-numeric value encountered in /home/cg/root/53040/main.php on line 4
Lưu ý rằng "ép kiểu" trong PHP hơi khác so với "điều khiển kiểu".
Trong việc chuyển đổi kiểu, PHP tự động chuyển đổi các kiểu từ kiểu này sang kiểu khác khi cần thiết. Ví dụ, nếu một giá trị số nguyên được gán cho một biến, nó sẽ trở thành một số nguyên.
Ngược lại, ép kiểu xảy ra khi người dùng định nghĩa rõ ràng kiểu dữ liệu mà họ muốn ép kiểu.
Ép kiểu buộc một biến được sử dụng như một kiểu nhất định. Đoạn mã sau đây cho thấy một ví dụ về các toán tử ép kiểu khác nhau −
<?php $var1=100; $var2=(boolean)$var1; $var3=(string)$var1; $var4=(array)$var1; $var5=(object)$var1; var_dump($var2, $var3, $var4, $var5); ?>
Nó sẽ tạo ra output −
bool(true) string(3) "100" array(1) { [0]=> int(100) } object(stdClass)#1 (1) { ["scalar"]=> int(100) }
Việc ép kiểu một biến thành chuỗi cũng có thể được thực hiện bằng cách đặt nó trong chuỗi được bao bởi dấu ngoặc kép.
<?php $var1=100.50; $var2=(string)$var1; $var3="$var1"; var_dump($var2, $var3); ?>
Ở đây, bạn sẽ nhận được output −
string(5) "100.5" string(5) "100.5"