整数变量与另一个整数变量的不均匀除法将导致通过自动转换产生浮点数--您不必将变量强制转换为浮点数以避免整数截断(例如,在C中):
$股息=2;
$除数=3;
$商=$被除数/$除数;
打印$quotient;// 0.66666666666667
注释 : 当需要将值解释为不同类型时,值本身 做 不 更改类型。
注释 :
<? php(电话)
//int |字符串
42 --> 42 //精确类型
"42" --> "42" //精确类型
新的 带有ToString的对象 --> “__toString()的结果”
//对象与int不兼容,回退到字符串
42 --> 42 //float与int兼容
42.1 --> 42 //float与int兼容
1e100 --> “1.0E+100” //浮点值对于int类型太大,回退到字符串
INF(信息) --> “INF”(信息) //浮点值对于int类型太大,回退到字符串
真实的 --> 1 //bool与int兼容
[] --> 类型错误 //数组与int或string不兼容
//int|float|bool
"45" --> 45 //int数字字符串
"45.0" --> 45 //浮点数字字符串
“45倍” --> 真实的 //不是数字字符串,返回bool
"" --> 假 //不是数字字符串,返回bool
“X” --> 真实的 //不是数字字符串,返回bool
[] --> 类型错误 //数组与int、float或bool不兼容
?>
<? php(电话)
$foo美元 = 10 ; //$foo是一个整数
$巴 =(布尔) $foo美元 ; //$bar是布尔值
?>
注释 :
(整数) 是的别名
(整数) 演员。
(布尔值) 是的别名
(布尔) 演员。
(二进制) 是的别名
(字符串) 演员。
(双倍) 和
(真实) 是的别名 这个
(浮动) 演员。 这些类型转换不使用规范类型名称,因此不建议使用。
注释 :
在类型转换的括号中忽略空白。 因此,以下两种类型转换是等效的:
<? php(电话) $foo美元 =(整数) $巴 ; $foo美元 =(整数) $巴 ; ?>
注释 : 而不是将变量强制转换为 一串 ,这也是可能的 将变量括在双引号中。
<? php(电话) $foo美元 = 10 ; //$foo是一个整数 $str(美元) = " $foo美元 " ; //$str是一个字符串 $fst(美元) =(字符串) $foo美元 ; //$fst也是一个字符串 //这打印出“他们是一样的” 如果( $fst(美元) === $str(美元) ) { 回声 “它们是一样的” ; } ?>
注释 : 因为PHP支持索引到 一串 s通过偏移 使用与相同的语法 阵列 索引,以下示例 适用于所有PHP版本:
<? php(电话) 美元 = “汽车” ; //$a是一个字符串 美元 [ 0 ] = “b” ; //$a仍然是字符串 回声 美元 ; //酒吧 ?> 请参阅标题为 字符串 按字符访问 了解更多信息。
整数变量与另一个整数变量的不均匀除法将导致通过自动转换产生浮点数--您不必将变量强制转换为浮点数以避免整数截断(例如,在C中):
$股息=2;
$除数=3;
$商=$被除数/$除数;
打印$quotient;// 0.66666666666667
将对象转换为数组是一件痛苦的事情。 例子:
<? php(电话)
班 类名 {
私有的 $优先 = '主值' ;
受保护的 $prot美元 = '保护值' ;
公众的 $pub(美元) = '发布值' ;
公众的 $MyClasspriv公司 = '第二个pub_value' ;
}
$测试 =新 类名 ();
回声 “<前>” ;
打印(r) ((数组) $测试 );
/*
阵列
(
[MyClasspriv]=>隐私值
[*prot]=>保护值
[pub]=>pub_value
[MyClasspriv]=>第二个pub_value
)
*/
?>
是的,这看起来像是一个有两个同名键的数组,而且受保护的字段前面加了一个星号。 但事实并非如此:
<? php(电话)
foreach((数组) $测试 作为 $键 => 价值$ ) {
单位:美元 = 斯特伦 ( $键 );
回声 " { $键 } ( { 美元 } ) => { 价值$ } <br/>“ ;
的( 1美元 = 0 ; $i美元 < 单位:美元 ; ++ 1美元 ) {
回声 字 ( $键 [ 1美元 ]) . ' ' ;
}
回声 “<小时/>” ;
}
/*
MyClasspriv(13)=>priv_value
0 77 121 67 108 97 115 115 0 112 114 105 118
*保护(7)=>保护值
0 42 0 112 114 111 116
pub(3)=>pub_value
112 117 98
MyClasspriv(11)=>second_pub_value
77 121 67 108 97 115 115 112 114 105 118
*/
?>
字符代码显示受保护的密钥以“\0*\0”开头,私钥以“\0”结尾__ 类别__.'\ 0'所以在玩这个时要小心。
强制转换操作符具有很高的优先级,例如,(int)$a/$b的计算结果为((int)$a)/$b,而不是(int)($a/$b)[如果$a和$b都是整数,则类似于intdiv($a,$b)]。
唯一的例外(从PHP 8.0开始)是求幂运算符**[即,(int)$a**$b被计算为(int)($a**$b)而不是(int)$a)**$b],以及特殊的访问/调用运算符->、::、[]和()[即,在(int)$1->$b、(int)#a::$b、。
如果要将字符串自动转换为浮点或整数(例如,将“0.234”转换为浮点,将“123”转换为int),只需在字符串中添加0即可,剩下的由PHP完成。
例如
$val=0+“1.234”;
($val的类型现在为float)
$val=0+“123”;
($val的类型现在是整数)
这里提供的对象强制转换方法没有考虑您试图将对象强制转换到的类的类层次结构。
/**
*将对象转换为特定类。
*@param对象$object
*@param string$class_name要将对象强制转换到的类
*@return对象
*/
公共静态函数转换($object,$class_name){
如果($object===false)返回false;
if(类存在($class_name)){
$ser_object=序列化($object);
$obj_name_len=字符串(get_class($object));
$start=$obj_name_len+strlen($obj_name_len)+6;
$new_object=“O:”。 strlen($class_name)。': “'.$class_name.'”:';
$新对象= substr($ser_object,$start);
$new_object=取消序列化($new_object);
/**
*新对象的类型正确,但
*未在其整个图形中完全初始化。
*获取完整对象图(包括父对象
*类数据,我们需要创建
*指定的类,然后分配新的
*属性。
*/
$graph=新的$class_name;
foreach($new_object作为$prop=>$val){
$graph->$prop=$val;
}
返回$graph;
}其他{
抛出新的CoreException(false,“在DB::cast中找不到用于casting的类$class_name”);
返回false;
}
}
打印或回显FALSE布尔值或NULL值会导致空字符串:
(string)TRUE//返回“1”
(string)FALSE//返回“”
echo TRUE// 打印“1”
echo FALSE// 什么都没印!
有一些更短更快的方法(至少在我的机器上)来执行类型转换。
<? php(电话)
$string($string) = '12345.678' ;
浮动美元 =+ $string($string) ;
$整数 = 0 | $string($string) ;
$布尔值 =!! $string($string) ;
?>