PHP - 类型转换



“类型转换”指的是将一种数据类型转换为另一种数据类型。由于 PHP 是一种弱类型语言,解析器在执行某些操作时会将某些数据类型强制转换为其他类型。例如,如果一个包含数字的字符串是加法运算中的操作数之一,则该字符串将转换为整数。

隐式类型转换

这是一个强制或隐式类型转换的示例:

<?php
   $a = 10;
   $b = '20';
   $c = $a+$b;
   echo "c = " . $c;
?>

在这种情况下,$b 是一个字符串变量,被强制转换为整数以进行加法运算。它将产生以下输出

c = 30

让我们来看另一个例子。这里,整数变量 $a 被转换为字符串,以便与字符串变量连接。

<?php
   $a = 10;
   $b = '20';
   $c = $a.$b;
   echo "c = " . $c;
?>

它将产生以下输出

c = 1020

除了这种强制类型转换之外,还有其他方法可以显式地将一种数据类型转换为另一种数据类型。您可以为此目的使用 PHP 的类型转换运算符或类型转换函数。

类型转换运算符

要将一种类型的表达式转换为另一种类型,需要在表达式之前用括号括起来目标数据类型。

$var = (type)expr;

PHP 中的一些类型转换运算符有:

  • (int) 或 (integer) 转换为整数

  • (bool) 或 (boolean) 转换为布尔值

  • (float) 或 (double) 或 (real) 转换为浮点数

  • (string) 转换为字符串

  • (array) 转换为数组

  • (object) 转换为对象

转换为整数

您可以轻松地将浮点值转换为整数。请看下面的示例

<?php
   $a = 9.99;
   $b = (int)$a;
   var_dump($b);
?>

它将产生以下输出

int(9)

请注意,浮点值不会四舍五入到最接近的整数;而是只返回整数部分。

字符串到整数转换

(int) 运算符也用于将字符串转换为整数。如果字符串只包含数字,则转换很简单。

<?php
   $a = "99";
   $b = (int)$a;
   var_dump($b);
?>

这里,您将获得以下输出

int(99)

即使字符串包含浮点数,(int) 运算符也只返回整数部分。

现在让我们来看另一个例子来理解一个特例。如果字符串是字母数字的,则使用 (int) 进行转换的方式不同

  • 如果字符串以数字开头,后面跟着非数字字符,则只考虑初始数字。

  • 如果字符串以非数字字符开头,而数字在中间,则转换运算符返回“0”。

请看下面的示例

<?php
   $a = "10 Rs.";
   $b = (int)$a;
   var_dump($b);

   $a = "$100";
   $b = (int)$a;
   var_dump($b);
?>

它将产生以下输出

int(10)
int(0)

转换为浮点类型

您可以使用 (float) 或 (double) 转换运算符将变量或表达式显式转换为浮点数。

<?php
   $a = 100;
   $b = (double)$a;
   var_dump($b);
?>

它将产生以下输出

float(100)

包含任何有效数字表示的字符串都可以使用转换运算符转换为浮点类型。

<?php
   $a = "100";
   $b = (double)$a;
   var_dump($b);

   $a = "9.99";
   $b = (float)$a;
   var_dump($b);
?>

这里,您将获得以下输出

float(100)
float(9.99)

即使字符串包含浮点数的科学计数法,也会转换为浮点数。请看下面的示例:

<?php
   $a = "1.23E01";
   $b = (double)$a;
   var_dump($b);
   $a = "5.5E-5";
   $b = (float)$a;
   var_dump($b);
?>

它将产生以下输出

float(12.3)
float(5.5E-5)

浮点数后面的所有非数字字符都将被忽略。类似地,如果字符串以任何非数字字符开头,则字符串将转换为“0”。请看下面的示例

<?php
   $a = "295.95 only";
   $b = (double)$a;
   var_dump($b);

   $a = "$2.50";
   $b = (float)$a;
   var_dump($b);
?>

它将产生以下输出

float(295.95)
float(0)

转换为字符串类型

通过使用转换运算符,任何计算结果为浮点数或整数的表达式都可以转换为字符串类型。以下是一些示例:

<?php
   $a = 100;
   $b = (string)$a;
   var_dump($b);

   $x = 55.50;
   $y = (string)$x;
   var_dump($y);
?>

您将获得以下输出

string(3) "100"
string(4) "55.5"

转换为布尔类型

任何非零数字(整数或浮点数)都将使用 (bool) 运算符转换为 true。计算结果为“0”的表达式返回 false。字符串始终转换为 true。

请看下面的示例

<?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);
?>

它将产生以下输出

bool(true)
bool(false)
bool(true)

类型转换函数

PHP 包含以下用于执行类型转换的内置函数:

  • intval()

  • floatval()

  • strval()

让我们详细讨论这些内置函数。

intval() 函数

此函数获取变量的整数值。

intval(mixed $value, int $base = 10): int

$base 参数默认为 10,这意味着该值将转换为十进制数。

  • 如果该值是浮点数,则 intval() 函数返回一个整数,丢弃小数部分。

  • 数字的字符串表示形式返回相应的整数,忽略小数部分(如有)。

  • 如果值为包含有效八进制数的字符串且基数为 8,则 intval() 函数返回相应的八进制数。

当基数为“0”时,值的转换基于字符前缀进行。

  • 如果值以 0X 或 0x 开头,则返回十六进制数。

  • 如果值以 0B 或 0b 开头,则返回二进制数。

  • 如果值以 0 开头,则函数返回八进制数。

intval() 函数对于 true 布尔值返回 1,对于 false 布尔值返回 0。

示例

以下示例演示了 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; 
?>

它将产生以下输出

42
4
42
34
34
34
26
26
26
0
1

floatval() 函数

floatval() 函数获取表达式的浮点值。

floatval(mixed $value): float

值可以是任何标量变量。包含非数字字符的字符串返回“0”。包含数字表示或以数字表示作为起始子字符串的字符串返回相应的数字。以下示例演示了 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; 
?>

它将产生以下输出

42
4.2
42
99.9
0
0
1

doubleval() 函数是 floatval() 函数的别名,因此返回类似的结果。

strval() 函数

strval() 函数获取变量的字符串值。此函数不对返回的值进行任何格式化。

strval(mixed $value): string

要转换为字符串的值可以是任何标量类型、null 或实现 __toString() 方法的对象。请查看以下示例

<?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; 
?>

它将产生以下输出

42
4.2
420000

1

以下示例定义了一个实现__toString() 方法的类。

<?php
   class myclass {
      public function __toString() {
         return __CLASS__;
      }
   }
   echo strval(new myclass);
?>

这里,您将获得以下输出

myclass
广告