5. PHP变量的类型(二)

续上一篇

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形式的函数,还应注意:

  1. is_scalar():判断是否是标量,即整数,浮点数,布尔型或字符串
    • is_numeric():判断是否是任何类型的数字或数字字符串
    • is_callable():判断是否是有效的函数名
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值