PHP是一种弱类型语言:PHP的变量没有数据类型的概念,可以存放任意的数据类型。数据本身都是有数据类型的,数据是人为分类的,分成不同的类型。在PHP中所讲的数据类型指的是变量所保存的数据本身。通常都是用变量的数据类型来代替变量所保存的数据的数据类型。
PHP将数据类型分为三大类八小类:
整型(integer)
浮点型(float)
布尔型(boolean)
字符串型(string)
数组(array)
对象(object)
空类型(NULL)
资源类型(resoure)
标量又称之为基本数据类型(简单数据类型)
分为四种:整型,浮点型,布尔型和字符串型
php变量保存的数据是整数(有效范围内)
$a = 3; // 3是一个整型,$a是一个整型 $b = -3; // 整型包含正和负(有符号)
php还能保存其他进制的整型
$num = 123; // 默认是十进制数据 $num = 0123; // 0不代表前缀:告诉服务器当前数据是八进制 $num = 0x123; // 十六进制
php输出给用户默认会全部解析成十进制
// 定义整型变量 $num1 = 123; // 定义整型最大值 $num2 = PHP_INT_MAX; // 定义八进制 $num3 = 0123; // 定义十六进制 $num4 = 0x123; var_dump($num1,$num2,$num3,$num4); /*输出结果 int(123) int(2147483647) int(83) int(291)*/
通用的转十进制的方法:将位数上的值 * 对应的进制的 N-1 次方(从右往左)
八进制转十进制
0123 ======> 十进制 3 * 8 ^ (1 - 1) + 2 * 8 ^ (2 - 1) + 1 * 8 ^ (3 - 1) 3 * 1 + 2 * 8 + 1 * 64 = 3 + 16 + 64 = 83
十六进制转十进制
0x123 ======> 十进制 3 * 16 ^ (1 - 1) + 2 * 16 ^ (2 - 1) + 1 * 16 ^ (3 - 1) 3 * 1 + 2 * 16 + 1 * 256 = 3 + 32 + 256 = 291
php可以按照数据本身的进制进行输出:需要使用特定的输出方式printf()
printf('输出方式占位符',要输出的数据列表);
十进制输出:%d
八进制输出:%o
十六进制输出:%x
printf("十进制的123是:%d;八进制的0123是:%o;十六进制的0x123是:%x",123,0123,0x123); // 输出结果:十进制的123是:123;八进制的0123是:123;十六进制的0x123是:123
带小数点的数值都是浮点型,超出整型范围的数值类型也是浮点型。
浮点型数据又称之为精度型数据:分为单精度(float)和双精度(double)
php中只有双精度,没有单精度:双精度也是有float表示不是double。
// 定义浮点数:小数点 $f1 = 0.12; $f2 = -123.0; // 超出整型范围 $f3 = PHP_INT_MAX + 1; // 支持科学计算法 $f4 = 1.23e10; // 1.23 * 10 ^ 10 $f5 = 23.4e-10; // 23.4 * 10 ^ -10 // 浮点数如果超出精度范围后,会自动的四舍五入 $f6 = 123456789012345678901234567890; var_dump($f1,$f2,$f3,$f4,$f5,$f6); /*输出结果 float(0.12) float(-123) float(2147483648) float(12300000000) float(2.34E-9) float(1.2345678901235E+29)*/
为什么浮点数能够存储较大的数据呢?4字节(单精度)
4个字节一共32位:如果全部用来存储数据最多表示42亿多
浮点数:使用一部分用来存储数据,另外一部分存储指数
整型(4个字节) 11111111 11111111 11111111 11111111 表示最大:42亿多 浮点型(4个字节) 11111111 11111111 11111111 11111111 表示最大 其中最左边的1代表符号位 第2-6位的1代表指数(5数):31 后面的1代表数值本身(26位):8个有效数组 组合:符号位(+/-) 数值 * e^指数值 - 6.7 * 10 ^ 7 * e ^ 31 => - 6.7 * 10 ^ 38
布尔类型只有两种数据:true或者false,布尔类型通常用于判断
// 定义布尔数据 $b1 = true; $b2 = false; var_dump($b1,$b2); /*输出结果 bool(true) bool(false)*/
在PHP中大部分的数据转换成布尔类型的时候都是true,只有以下几种类型会转换成false
存储的数据是字符串数据:是一类应用最广的数据类型(互联网之间传递的数据和文件内部存储的数据全部都是字符串)
在php中,字符串有三种定义方式:
单引号:数据用单引号包裹
// 使用单引号定义字符串 $str1 = ''; // 空字符串 $str2 = '123'; // 纯数值型字符 $str3 = 'hello world'; var_dump($str1,$str2,$str3); /*输出结果 string(0) "" string(3) "123" string(11) "hello world"*/
双引号:数据用双引号包裹
// 使用双引号定义字符串 $str4 = ""; $str5 = "456"; $str6 = "你好我们"; // 当前使用的编码是unicode,一个中文是一个字符,占用3个字节存储 var_dump($str4,$str5,$str6); /*输出结果 string(0) "" string(3) "456" string(12) "你好我们"*/
单引号与双引号的区别
单引号能转移的字符: \\, \'
双引号能转义的字符: \\, \", \r\n, \t, \$
$str7 = 'ab\\\r\n\t\$\'\"cdefg'; $str8 = "ab\\\r\n\t\$\'\"cdefg"; var_dump($str7,$str8); /*输出结果 string(19) "ab\\r\n\t\$'\"cdefg" string(15) "ab\ $\'"cdefg"*/
$str = '123'; $str7 = '$str'; $str8 = "$str"; var_dump($str7,$str8); /*输出结果 string(4) "$str" string(3) "123"*/
双引号解析变量的时候注意事项:系统没有办法自动的区分变量名字,只要$符号后面跟的普通字符串(字母,下划线和数字)都会被系统当做变量的名字:
$str = '123'; $str8 = "$str a"; var_dump($str8); /*输出结果 string(5) "123 a"*/
$str = '123'; $str8 = "{$str}a"; var_dump($str8); /*输出结果 string(5) "123a"*/
$变量 = <<<定界符标志
// 中间所有的内容都是字符串
定界符标志;
$str9 = <<<END // 中间所有的内容都是字符串 <script> alert('hello world'); </script> END; echo $str9; /*输出结果 // 中间所有的内容都是字符串 <script> alert('hello world'); </script>*/
定界符特点:
定界符的存在其实本质是为了解决引号字符串的多行问题以及结构问题
定界符分为两种:分别代表单引号和双引号
$str = 'hello world'; $str9 = <<<END // 中间所有的内容都是字符串 <script> alert('$str'); </script> END; echo $str9; /*输出结果 // 中间所有的内容都是字符串 <script> alert('hello world'); </script>*/
$str = 'hello world'; $str9 = <<<'END' // 中间所有的内容都是字符串 <script> alert('$str'); </script> END; echo $str9; /*输出结果 // 中间所有的内容都是字符串 <script> alert('$str'); </script>*/
只有两种数据类型:
表示能够存储多个数据(保存在内存中的堆区)
只有两种数据类型: