4. PHP变量的类型(一)

1. 四种标量类型

1.1 布尔类型boolean

以下值被认为是false,所有其他值都被认为是true(包括任何资源)
- 布尔值false
- 整型值0(零)为假,-1和其他非零值(不论正负)一样,都被认为true
- 浮点型值0.0
- 空白字符串和字符串”0”
- 没有成员变量的数组
- 没有单元的对象(仅使用PHP4)
- 特殊类型NULL(包括尚未设定的变量)

PHP手册〉附录〉类型比较表〉使用 PHP 函数对变量 $x 进行比较

1.2 整数类型int

注意

  • PHP中我们常用十进制数,还可以用十六进制(用十六进制符号数字前面必须加上”0x”,0-9数字和A-F字母组成),八进制(数字前面必须加上”0”(零),0-7数字组成)。
  • 整型数值有最大的使用范围,整型数子长和平台有关,对于32位操作系统,最大整数二十多亿(2 147 483 647).PHP不支持无符号整数,即不能像其他语言一样最大值翻一倍。整型的最小值为-2147 483 648.如果超出范围将会被解释为float.

进制转换

  1. 十进制转换为二进制decbin(),除2取余倒着写.

    • 基本做法是:将10进制数字除以2,并取得余数,如果除得的商不为0,则继续除以2,并继续去的余数,直到商为0。然后将所有取得的余数,按“倒序写出”,就是对应的2进制数字:
    • $v1 = decbin(123);//注意:参数必须是10进制数字,转换后的结果必然是二进制字符串。

    • 十进制转八进制decoct(),除8取余倒着写

    • 基本做法是:将10进制数字除以8,并取得余数,如果除得的商不为0,则继续除以8,并继续去的余数,直到商为0。然后将所有取得的余数,按“倒序写出”,就是对应的8进制数字
    • 十进制转十六进制dechex(),除16取余倒着写
    • 二进制转十进制bindec(),每位数值乘以2的权值然后相加.权值:就是某位数字上的该数字所代表的数的大小。比如:
    • 10进制数字1234,其代表:1*10 3+ 2*102 + 3*101 + 4*100 = 1000+ 200 + 30 + 4;
      这里,10 3, 102,101,等等,就称为权值
    • 八进制转十进制octdec() ,每位数值乘以8的权值然后相加
    • $v1 = octdec(“8进制数字字符串”) ;//得到的结果是10进制数字
    • 十六进制转十进制hexdec() ,每位数值乘以16的权值然后相加
    • $v1 = hexdec(“16进制数字字符串”) ;//得到的结果是10进制数字

**注意:十进制转为其他进制结果是字符串,其他进制转为十进制要求给定数据是字符串形式
**

例如

<?php
$v1 = bindec(123);//理解过程:bindec(“123”) =>bindec(“1”)=>1
$v2 = bindec(0123);//理解:0123是8进制数字,其10进制值为:83,再当作二进制字符串就是“83”,结果就只能是0
$v3 = bindec(“0123”);//理解:因为直接就是字符串了,就当二进制字符串用,结果是1
$v4 = octdec(0123);      //理解:0123是8进制数字,其10进制值为:83,再当作8进制字符串就是“83”,但8进制中没有“8”这个数字,就只识别出一个“3”这个数字

1.3 浮点类型float/double

浮点数只是一种近似的值。如果用浮点数表示8,则其结果内部的表示其实类似7.9999999999999····.

所以永远不要相信浮点数结果精确到了最后一位,也不要比较两个浮点数是否相等。如果确实需要更高的精度,可以使用任意精度数学函数或者gmp()函数

有两种写法

  • $v1 = 1.234;//带小数点,就是浮点类型
  • $v2 = 1.234E3
  • $v3 = 1234E3;结果是1234000,但也是一个浮点数
  • $v4 = 1234E3E4;错误

浮点数的细节

10进制小数转二进制小数的做法:乘2并顺序取整数部分
没有系统函数使用。

//十进制小数转换为2进制小数
//方法:小数部分乘以2,并顺序取得小数部分
//例如:0.6125
0.6125*2
= 1.225     整1
0.225*2
= 0.45      整0
0.45*2
= 0.9       整0
0.9*2
= 1.8       整1
0.8*2
= 1.6       整1
0.6*2
=1.2        整1
0.2*2
=0.4        整0
0.4*2
=0.8        整0
·······写不完了
结果:0.1001 1100 1100 1100 ......

//例如:0.625
0.625*2
= 1.25      整1
0.25*2
= 0.5       整0
0.5*2
= 1.0       整1
结果:0.101

可见:绝大部分小数都无法完整转换为二进制小数

因此浮点数不应该进行大小比较
**因为浮点数在系统内部(cpu级别),很可能都是不精确表达。d
要想进行比较,我们只能考虑自己应用中的精度要求的基础上,将其转换为整数进行比较。**

通常的做法是:乘以10的精度位数数次方,比如精度要求3位有效数字,则乘以10的3次方

<?php
$v1 = 8.1/3;
echo '<br/>php中,8.1/3结果是'.$v1;
if($v1 < 2.7){
    echo '<br/>php中,8.1/3小于2.7';
}

if(round($v1*1000)==round(2.7*1000)){
    echo '<br/>php中,8.1/3等于2.7(按3位精度)';
}else{
    echo '<br/>php中,8.1/3不等于2.7(按3位精度)';
}

/**
    结果:
         php中,8.1/3结果是2.7
         php中,8.1/3小于2.7
         php中,8.1/3等于2.7(按3位精度)
 */

1.4 字符串类型string

转义字符

序列含义
\n换行(ASCII 字符集中的 LF 或 0x0A (10))
\r回车(ASCII 字符集中的 CR 或 0x0D (13))
\t水平制表符(ASCII 字符集中的 HT 或 0x09 (9))
\v垂直制表符(ASCII 字符集中的 VT 或 0x0B (11))(自 PHP 5.2.5 起)
\eEscape(ASCII 字符集中的 ESC 或 0x1B (27))(自 PHP 5.4.0 起)
\f换页(ASCII 字符集中的 FF 或 0x0C (12))(自 PHP 5.2.5 起)
\| 反斜线
$美元标记
\”双引号
[0-7]{1,3}符合该正则表达式序列的是一个以八进制方式来表达的字符
\x[0-9A-Fa-f]{1,2}符合该正则表达式序列的是一个以十六进制方式来表达的字符

单引号

<?php
//单引号字符串:
//可以识别的转义字符:\\ 和\'[实际上,只有字符串中的最后一个“\”才必须使用转义符]
$str1 = 'ab\nc"dd\t\'efdd:$ds\\';
echo $str1;
//结果:
//ab\nc"dd\t'efdd:$ds\

双引号

<?php
//双引号字符串
//可以识别所有转义字符
//可以自动识别变量(以$开头的连续字符,有时需要使用花括号{}来界定变量名)
$str2 = "ab\nc\"dd\tdda,,:$addb";
echo $str2;

nowdoc(单引号定界符字符串)

<?php
//nowdoc(单引号)定界符字符串:
//说明:ABCD是一个自定义的标识符,放在单引号中
//此字符串形式没有可用的转义符
$str3 = <<<'ABCD'
在这里可以写任何东西,一般经常用来些html代码,js代码等
包括回车换行,tab等     $符等包括单双引号都能够正常输出,
点击查看源代码可以看到效果
ABCD;
echo $str3;

heredoc(双引号定界符字符串)

<?php
//here(双引号)定界符字符串
//说明:ABCD是一个自定义的标识符,放在双引号(或不用引号)
//在此形式中,其转义符跟双引号字符串几乎差不多(双引号不转义)
$str4 =<<<"ABCDE"
这里就是字符串的内容。和双引号差不多
$abd \t等等等
ABCDE;
echo $str4;

2. 两种复合类型

数组类型array

标识一系列数据的“有序排列”的集合体,PHP中,数组的下标可以使用整数或字符串

数字下标常说”索引号”,字符串下标常说”键名”
在PHP的报错系统中,都叫做”index”,或”offset”

对象类型object

在php中,对象跟js中的有比较大的区别

通常,js中的对象,有自定义的,也有现成的,但是PHP中的对象,通常都是指自定义的对象


3. 两种特殊类型

资源类型resource

资源是一种特殊类型的变量,保存了到外部资源的一个引用。资源是通过专门的函数来建立和使用的。不是PHP语言通过某种语法形式”创造”的数据。而是外部本来就有的数据(比如数据库,文件,图片等)。PHP只是通过某种语法(或方式)来对其进行某些操作。

空类型null

表示一个变量没有值,NULL类型唯一可能的值就是NULL.NULL不表示空格,也不表示零。也不是空字符串,而是表示一个变量值为空

null不区分大小写,在下列情况下一个变量被认为是NULL:

  • 将变量直接赋值为NULL
  • 声明的变量尚未被赋值
  • 被unset()函数销毁的变量
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值