PHP - Type Casting

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.

Implicit Type Casting

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.

Type Casting Operators

Để 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

Casting to Integer

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.

String to Integer Conversion

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)

Casting to Float Type

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)

Casting to String Type

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"

Casting to Bool Type

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)

Type Casting Functions

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.

The intval() Function

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.

Example

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

The floatval() Function

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ự.

The strval() Function

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