PHP - 类型转换



由于 PHP 是一种弱类型语言,因此解析器在执行某些操作时会将某些数据类型强制转换为其他数据类型。例如,如果具有 digits 的字符串是加法运算中涉及的操作数之一,则该字符串将转换为 integer。

隐式类型转换

下面是强制或隐式类型转换的示例 -


<?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) 强制转换为对象

转换为 Integer

您可以轻松地将 float 值转换为整数。请看下面的例子 -


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

它将产生以下输出 -

int(9)

请注意,float 值不会四舍五入到最接近的整数;相反,它只返回 Integer 部分。

字符串到整数的转换

(int) 运算符还将字符串转换为整数。如果字符串仅包含数字,则转换非常简单。


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

在这里,您将获得以下输出 -

int(99)

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

现在让我们再举一个例子来了解一个特殊情况。如果字符串是字母数字,则使用 (int) 进行强制转换的工作方式不同。

  • 如果字符串以数字开头,后跟非数字字符,则仅考虑初始数字。
  • 如果字符串以非数字字符开头,并且数字位于中间,则 csting 运算符返回 “0”。

请看下面的例子 -


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

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

它将产生以下输出 -

int(10)
int(0)

Casting to Float 类型

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


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

它将产生以下输出 -

float(100)

包含任何有效数字表示形式的字符串都可以使用强制转换运算符强制转换为 float 类型。


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

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

在这里,您将获得以下输出 -

float(100)
float(9.99)

即使字符串嵌入了 float 的科学记数法,它也会被转换为 float。请看下面的例子 -


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

转换为 String 类型

通过使用强制转换运算符,任何计算结果为浮点或整数的表达式都可以强制转换为字符串类型。下面给出了几个例子 -


<?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 类型

任何非零数字(整数或浮点数)都使用 (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() 函数将返回相应的八进制数。

当 base 为 “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() 函数获取表达式的 float 值。


 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