续上一篇
1. 伪类型
伪类型并不是PHP语言中的基本数据类型。只是因为PHP是弱类型语言。所以在一些函数中,一个参数可以接收多种数据类型的数据,还可以接收别的函数作为回调函数使用。
- mixed:说明一个参数可以接收多种不同的(但并不是必须所有的)类型。例如gettype()可以接收所有的PHP类型,str_replace()可以接收字符串和数组
- number: 说明一个参数可以是integer或者float
- callback: 有一些如 call_user_function()或usort()函数接收用户自定义的函数作为一个参数。callback函数不仅可以是一个简单的函数,还可以是一个对象的方法,包括静态类的方法。一个PHP函数用函数名字符串来传递。可以传递任何内置的或者用户自定义的函数,除了array(),echo(),empty(),eval(),exit(),isset(),list(),print()和unset()
2. 数据类型之间互相转换
2.1 自动类型转换
不同数据类型的变量进行混合运算时,若参与运算量的类型不同,则先转换为同一类型,然后再进行运算。通常只有4种标量类型才使用自动类型转换。
注意,这并没有改变这些运算数本身的类型,改变的仅是这些运算数如何被求值。在混合运算时,自动转换要遵循转换按数据长度增加的方向进行以保证精度不降低
注意
- 有布尔型值参与运算时,true将转化为整型1,false将转化为整型0后载参与运算
- 有null值参与运算时,null值转化为整型0再进行运算
- 有integer和float型参与运算时,先把integer转化为float型再进行计算
- 有字符串和数字型(integer,float)数据参与运算时,字符串先转换为数字,再参与运算。转化后的数字是从字符串开始的数值型字符串。如果在字符串开始的数值型字符串不带小数点则转换为integer型,如果带小数点则转换为float类型。
- if(数据){}:转为bool类型
- 算术运算符:转为数字类型
- 连接运算符:转为字符串类型
- 比较运算符:转为布尔类型或数字类型
- 两边如果有至少一个布尔,则另一边就会转为布尔,并进行比较。否则,就转为数字进行比较
“5” ==>> 5//整数
“5.5” ==>> 5.5浮点数
“5abc” ==>> 5整数
“5.5ab” ==>> 5.5浮点数
“abc5” ==>> 0整数
“abc” ==>> 0整数
“” ==>> 0
2.2 强制类型转换
两种方式:
- 通过在变量前加上括号括起来的目标类型。
- 使用具体的转换函数,intval(),floatval()和strval()等,或是使用setType()函数转换类型
<?php
$foo = 10;//$foo是一个整型
$bar = (boolean)$foo; //$bar是一个布尔型
$str = '123.45abc'; //声明一个字符串
$inte = intval($str);//获取$str的整型值123
$flo = floatval($str);//获取变量的浮点值123.45
$str = strval(123.45);//获取变量的字符串值"123.45"
以上两种类型的强制转换都没有改变这些被转换变量本身的类型,而是通过转换将得到的新类型的数据赋值给新的变量,原变量的类型和值不变如果需要将变量本身的类型改变承其他类型,可以使用setType()函数来设置变量的类型
<?php
$foo = "5bar";
$bar = true;
settype($foo,"integer"); //$foo现在是5(integer)
settype($bar,"string"); //$bar现在是"1"(string)
注意:整型转换为浮点型精度不变。但是浮点型转换为整型,将自动舍弃小数部分,只保留整数部分。如果一个浮点数超过整型数字的有效范围,其结果将是不确定的。整型最大值为2.147e9。当字符串转化为数字时,转换后的数字是从字符串开始部分的数值字符串。数值字符串包括用科学计数法表示的数字。NULL值转为字符串,为空字符”“;
3. 变量类型的测试函数
除了常用的那几个is_type形式的函数,还应注意:
is_scalar()
:判断是否是标量,即整数,浮点数,布尔型或字符串
is_numeric()
:判断是否是任何类型的数字或数字字符串is_callable()
:判断是否是有效的函数名