4. PHP变量的类型(一)

来源:互联网 发布:潘任美事件公知 编辑:程序博客网 时间:2024/04/27 19:30

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.61250.6125*2= 1.225     整10.225*2= 0.45      整00.45*2= 0.9       整00.9*2= 1.8       整10.8*2= 1.6       整10.6*2=1.2        整10.2*2=0.4        整00.4*2=0.8        整0·······写不完了结果:0.1001 1100 1100 1100 ......//例如:0.6250.625*2= 1.25      整10.25*2= 0.5       整00.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 起) \e Escape(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
原创粉丝点击