注意该笔记只记录部分:
目录
常量
常量是相对于变量来说的:是一个其中存储的数据不会也不应该改变的“标识符”。
常量的使用,就2个方面:定义,取值。
常量的定义:
常量的使用——取值:
也有两种形式:直接使用名字,或通过constant()函数取得其值;
常量变量的区别
定义形式不同:
使用形式不同:常量无需$符号
可变程度不同:常量的值不可以改变,常量也不可以销毁
作用范围不同:常量具有超全局作用域 (函数内外都可以直接使用)
可用类型不同:常量只能存储标量类型(整数,浮点数,字符串,布尔)
判断常量是否存在
使用defined()函数:
如果存在:返回结果是true,
如果不存在:返回结果是false
使用一个未定义的常量:
先看2个对比代码:
echo “v1的值为” . $v1; //注意,该变量v1未定义过
echo “C1的值为” . C1; //注意,该常量C1未定义过
注意:在php中,当使用一个未定义的常量的时候,系统会直接将该常量当做“有值”的常量去使用,并且其值就是该常量名——虽然也会报错!
预定义常量
就是系统中预先定义好的一些常量,大约有几百个,我们只要知道几个就行:
M_PI: 就是圆周率的常量值;
PHP_OS: 就是php运行所在的操作系统
PHP_VERSION:就是php的版本号
PHP_INT_MAX: php中的最大的整数值
......更多可参考:php手册>附录>保留字列表>预定义常量
魔术常量
其实只是常量的形式,但没有常量的“恒常”的含义:其值其实会变化的,只有很少的几个:
__FILE__ :代表当前网页文件的完整物理路径
__DIR__ :代表当前网页文件所在的文件夹
__LINE__ :代表当前这个常量名所在的”行号”
数据类型
总体划分
有8种数据类型:
基本类型(标量类型):
整数类型: int, integer
浮点数类型: float,double, real
字符串类型: string
布尔类型: bool, boolean 这种类型,只有2个数据:true,false
复合类型:
数组: array
对象: object
特殊类型
空类型: null 这种类型中,只有一个数据,那就是null
资源类型: resource
整数类型
整数类型的4种写法:
$n1 = 123; //10进制数字写法
$n2 = 0123; //8进制数字写法,实际n2中存储的数字比123小
$n3 = 0x123; //16进制数字写法,实际n3中存储的数字比123大
$n4 = 0b1010; //2进制数字写法(目前不学)
进制转换问题
首先记住这几个单词:
bin:2进制
oct:8进制
dec:10进制
hex:16进制
进制转换主要分2种情况:
1,10进制转换为其他3种进制:decbin(), decoct(), dechex();
2,其他3种进制,转换为10进制:
进制转换的系统函数——必须会用
进制转换主要分2种情况:
1,10进制转换为其他3中进制:----特别注意括号里的是数字
decbin(一个10进制数字): 结果返回的是该数字的2进制数字形式的字符串!!!
decoct(一个10进制数字): 结果返回的是该数字的8进制数字形式的字符串!!!
dechex(一个10进制数字): 结果返回的是该数字的16进制数字形式的字符串!!!
2,其他3种进制,转换为10进制:---特别注意括号里的为字符串
bindec(一个2进制数字字符串): 结果返回的是该2进制数字字符串对应的10进制数字!!!
octdec(一个8进制数字字符串): 结果返回的是该8进制数字字符串对应的10进制数字!!!
hexdec(一个16进制数字字符串): 结果返回的是该16进制数字字符串对应的10进制数字!!!
对于输入的字符串中的字符,如果不是对应进制的数字,会被忽略。
那么,有没有这个转换呢?hexbin()???? ——没有!
一个思考题:
将8进制字符串”12345”,转换为2进制结果,怎么做?(通过10进制中转来解决)
$v1 = octdec(“12345”); //此时,v1是10进制数字
$result = decbin( $v1 ); //此时,就是结果:为2进制数字字符串!
补充进制基础知识:
一个课后题:
$v1 = 0x123; //它的实际大小其实是:291
$result = octdec( $v1 ); //结果为:17,怎么理解?推理如下:
1,octdec( $v1 )
2,octdec(291) //因为$v1的实际值就是291
3,octdec(“291”); //因为octdec()函数要求输入一个字符串,这属于自动转换
4,octdec(“21”); //因为octdec()函数要求输入一个8进制数字字符串,而9不是合法的数字,忽略掉
5,结果,8进制数字”21”转换为10进制就是就是17;
进制转换的人工计算——了解其原理
10进制转换为2进制:
做法:除2取余倒着写出所有余数,就是对应的2进制数字形式;
详细解释:将一个10进制数字除以2,得到商和余数,如果商还大于等于2,则继续除以2,继续得到商和余数,以此类推,直到商为0为止,然后将前面的所有余数按倒序写出来就是对应的2进制数字。
10进制转换为8进制:
做法:除8取余倒着写出所有余数,就是对应的8进制数字形式;
详细解释:将一个10进制数字除以8,得到商和余数,如果商还大于等于8,则继续除以8,继续得到商和余数,以此类推,直到商为0为止,然后将前面的所有余数按倒序写出来就是对应的8进制数字。
10进制转换为16进制:
做法:除16取余倒着写出所有余数,就是对应的16进制数字形式;
详细解释:将一个10进制数字除以16,得到商和余数,如果商还大于等于16,则继续除以16,继续得到商和余数,以此类推,直到商为0为止,然后将前面的所有余数按倒序写出来就是对应的16进制数字。
其他进制转换为10进制的做法:
先看一种对数字大小和“数字权值”的理解:
对一个10进制数字: 1234,可以这样去理解它的大小:
(任何数的0次方都是1)
这里,我们对 等等,称为“权值”;每个位的权值是不同的。
对于10进制,每个位上的权值,就是10 的 n次方;
对于8进制,每个位上的权值,就是8的 n次方;
对于16进制,每个位上的权值,就是16 的 n次方;
对于2进制,每个位上的权值,就是2 的 n次方;
8进制转换10进制:
将8进制数字的每个位上的数字乘以其对应位上的权值,然后相加之后的结果。
举例:有一个8进制数字123,则其实际大小为:
16进制转换10进制:
将16进制数字的每个位上的数字乘以其对应位上的权值,然后相加之后的结果。
举例:有一个16进制数字123,则其实际大小为:
2进制转换10进制:
将2进制数字的每个位上的数字乘以其对应位上的权值,然后相加之后的结果。
举例:有一个2进制数字101011,则其实际大小为: