PHP - 类型转换
“Type Casting”(类型转换)指的是将一种数据类型转换为另一种数据类型。由于 PHP 是一种弱类型语言,解析器在执行某些操作时会强制将某些数据类型转换为其他类型。例如,如果字符串包含数字,并且它是加法运算的操作数之一,则会被转换为 integer。
目录
隐式类型转换
类型转换运算符
转换为 Integer
转换为 Float 类型
转换为 String 类型
转换为 Bool 类型
类型转换函数
隐式类型转换
以下是强制性或隐式类型转换的示例 −
<?php $a = 10; $b = '20'; $c = $a+$b; echo "c = " . $c; ?>
在这种情况下,$b 是一个 string 变量,会被转换为 integer 以进行加法运算。它将产生以下输出 −
c = 30
再看另一个示例。这里,integer 变量 $a 被转换为 string,以便与 string 变量进行连接。
<?php $a = 10; $b = '20'; $c = $a.$b; echo "c = " . $c; ?>
它将产生以下输出 −
c = 1020
除了这种强制类型转换外,还有其他方式可以显式地将一种数据类型转换为另一种类型。您可以使用 PHP 的类型转换运算符或类型转换函数来实现此目的。
类型转换运算符
要将一种类型的表达式转换为另一种类型,需要在表达式前用括号将目标数据类型括起来。
$var = (type)expr;
PHP 中的一些类型转换运算符包括 −
(int) 或 (integer) 转换为 integer
(bool) 或 (boolean) 转换为 boolean
(float) 或 (double) 或 (real) 转换为 float
(string) 转换为 string
(array) 转换为 array
(object) 转换为 object
转换为 Integer
您可以轻松地将 float 值转换为 integer。请看以下示例 −
<?php $a = 9.99; $b = (int)$a; var_dump($b); ?>
它将产生以下输出 −
int(9)
请注意,float 值不会四舍五入到最接近的 integer,而是直接返回整数部分。
String 到 Integer 转换
(int) 运算符也可以将 string 转换为 integer。如果 string 只包含数字,转换非常直接。
<?php $a = "99"; $b = (int)$a; var_dump($b); ?>
这里,您将得到以下输出 −
int(99)
即使 string 包含浮点数,(int) 运算符也只返回整数部分。
现在来看另一个示例,以理解特殊情况。如果 string 是字母数字混合的,使用 (int) 进行转换会有所不同。
如果 string 以数字开头,后跟非数字字符,则只考虑开头的数字。
如果 string 以非数字字符开头,数字在中间,则转换运算符返回 "0"。
请看以下示例 −
<?php $a = "10 Rs."; $b = (int)$a; var_dump($b); $a = "$100"; $b = (int)$a; var_dump($b); ?>
它将产生以下输出 −
int(10) int(0)
强制转换为 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。请看以下示例 −
<?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 类型
通过强制转换运算符,任何求值为浮点数或整数的表达式都可以强制转换为 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 类型
任何非零数字(无论是 integer 还是 float)使用 (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()
让我们详细讨论这些内置函数。
The intval() Function
此函数获取变量的整数值。
intval(mixed $value, int $base = 10): int
$base 参数默认为 10,这意味着值将被转换为十进制数。
如果值为 float,intval() 函数返回整数,丢弃小数部分。
数字的字符串表示返回对应的整数,丢弃小数部分(如果有)。
如果值为有效的八进制数的字符串且 base 为 8,intval() 函数返回对应的八进制数。
当 base 为 "0" 时,值的转换将根据字符前缀进行。
如果值以 0X 或 0x 开头,返回十六进制数。
如果值以 0B 或 0b 开头,返回二进制数。
如果值以 0 开头,函数返回八进制数。
intval() 函数对 true 返回 1,对 false 返回 0。
Example
以下示例展示了 intval() 函数的工作方式 −
<?php
echo intval(42). PHP_EOL;
echo intval(4.2). PHP_EOL;
echo intval('42') . PHP_EOL;
echo intval(042) . PHP_EOL; # 八进制数
echo intval('042', 0) . PHP_EOL; # 八进制数
echo intval('42', 8) . PHP_EOL; # 八进制
echo intval(0x1A) . PHP_EOL; # 十六进制
echo intval('0x1A', 16) . PHP_EOL; # 十六进制
echo intval('0x1A', 0) . PHP_EOL; # 十六进制
echo intval(false) . PHP_EOL;
echo intval(true) . PHP_EOL;
?>
它将产生以下 输出 −
42 4 42 34 34 34 26 26 26 0 1
The floatval() Function
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() 函数的别名,因此返回类似的结果。
The strval() Function
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() 方法 的 class。
<?php
class myclass {
public function __toString() {
return __CLASS__;
}
}
echo strval(new myclass);
?>
这里,你将得到以下 输出 −
myclass