PHP 变量类型是动态变化的。此功能在 PHP 中称为 “类型戏法”。
PHP 变量类型由分配的值决定,当变量分配不同类型的值时,其类型也会发生变化。
示例 1
请看下面 PHP 中的变量赋值。
<?php
$var = "Hello";
echo "变量 \$var 是 " . gettype($var) . " 类型" .PHP_EOL;
$var = 10;
echo "变量 \$var 是 " . gettype($var) . " 类型" .PHP_EOL;
$var = true;
echo "变量 \$var 是 " . gettype($var) . " 类型" .PHP_EOL;
$var = [1,2,3,4];
echo "变量 \$var 是 " . gettype($var) . " 类型" .PHP_EOL;
?>
将产生以下输出 -
变量 $var 是 string 类型
变量 $var 是 integer 类型
变量 $var 是 boolean 类型
变量 $var 是 array 类型
变量 $var 是 integer 类型
变量 $var 是 boolean 类型
变量 $var 是 array 类型
上面根据分配给 $var 的值动态更改类型。
示例 2
在计算表达式期间也会发生类型戏法。下面 数字字符串 变量会自动转换为 整数,以便进行加法。
<?php
$var1=100;
$var2="100";
$var3=$var1+$var2;
var_dump($var3);
?>
这是输出 -
int(200)
示例 3
如果字符串以数字开头,则在执行计算时将忽略尾随的非数字字符(如果有)。但是,PHP 解析器会发出如下所示的通知 -
<?php
$var1=100;
$var2="100 days";
$var3=$var1+$var2;
var_dump($var3);
?>
您将获得以下输出 -
int(200)
PHP Warning: A non-numeric value encountered in /home/user/main.php on line 4
PHP Warning: A non-numeric value encountered in /home/user/main.php on line 4
类型转换 vs 类型戏法
请注意,PHP 中的 “类型转换” 与 “类型戏法” 略有不同。
- 在类型戏法中,PHP 会在必要时自动将类型转换为另一种类型。例如,如果将整数值分配给变量,则该变量将变为整数。
- 另一方面,当用户显式定义他们想要强制转换的数据类型时,就会发生类型转换。
例子
类型转换强制将变量用作特定类型。以下脚本显示了不同类型的强制转换运算符的示例 -
<?php
$var1=100;
$var2=(boolean)$var1;
$var3=(string)$var1;
$var4=(array)$var1;
$var5=(object)$var1;
var_dump($var2, $var3, $var4, $var5);
?>
它将产生以下输出 -
bool(true)
string(3) "100"
array(1) {
[0]=>
int(100)
}
object(stdClass)#1 (1) {
["scalar"]=>
int(100)
}
string(3) "100"
array(1) {
[0]=>
int(100)
}
object(stdClass)#1 (1) {
["scalar"]=>
int(100)
}
例子
将变量转换为字符串也可以通过用双引号括起来 string 来完成 -
<?php
$var1=100.50;
$var2=(string)$var1;
$var3="$var1";
var_dump($var2, $var3);
?>
在这里,您将获得以下输出 -
string(5) "100.5"
string(5) "100.5"
string(5) "100.5"