3. 常量
3.1. 常量的含义
常量,就是一个用于存储“不会(也不允许)变化的数据”的标识符。
比如圆周率,在一定的应用场景中,就是是一个固定的值(人为规定为某个值)。
3.2.常量的两种定义形式
3.2.1. define()函数形式:
define(‘常量名’, 对应的常量值);
常量名推荐使用“全大写”。
3.2.2. const关键字定义:
const 常量名 = 对应的常量值;
3.3. 常量的两种取值形式
3.3.1. 直接使用:
echo 常量名; //注意:使用常量,前面不带”$”符号,也不能有引号
3.3.2. 使用constant()函数以取值:
echo constant(‘常量名’); //注意,此时常量名要用引号引起来。
3.4. 变量与常量的区别:
1,变量的数据可以变化(重新赋值),常量不可以。
2,变量可以存储各种数据类型,而常量只能存储简单数据类型。
3,给变量赋值可以是“计算”结果,但给常量赋值,只能是“直接写出的值”(字面值)
3.5. 判断一个常量是否存在:defined();
判断的结果返回:true(表示存在)或false(表示不存在)
形式:
if( defined (‘常量名’) ) { //如果该常量名存在,则....
//....做什么事情。。。。
}
演示:
3.6. 预定义常量
预定义常量就是PHP语言内部预先定义好的常量,我们可以直接使用。
比如:PHP_VERSION, PHP_OS, PHP_INT_MAX, M_PI等。
PHP_VERSION: 表示当前php的版本信息
PHP_OS: 表示当前php运行所在的系统信息
PHP_INT_MAX: 表示当前版本的php中的最大的整数值
M_PI: 表示圆周率π(一个有10多位小数的数)
查手册,预定义常量如下:
3.7. 几个魔术常量
含义:
魔术常量也是常量,只是在形式上为常量,而其值其实是“变化”的。
他们也是系统中预先定义好的,也就几个,下面是最常用的 3个:
__DIR__ :代表当前php网页文件所在的目录
__FILE__ :代表当前php网页文件本身的路径
__LINE__, :代表当前这个常量所在的行号
今日总结
变量:
用于存储数据的一个“标识符”——就是变量名。
变量的命名规则:
基本规则:
以字符,下划线,数字构成,并不能以数字开头
行业规则:
尽量见名知意。
大驼峰命名法,小驼峰命名法
变量的4种基本操作:
赋值,取值,判断isset(), 销毁unset()
变量的传值方式:
概念:将一个变量传给另一个变量。
值传递:各自独立,互不干扰。
引用传递(传地址,地址传递):他们都指向同一个数据!
改变其中任何一个,另一个也跟着改变。
但:unset()其中任何一个,另一个不受影响。
4个预定义变量:
$_GET, $_POST, $_REQUEST,
$_SERVER:一些在请求中的客户端或服务器端的固定的数据。
比如:REMOTE_ADDR, SERVER_ADDR, DOCUMENT_ROOT, PHP_SELF
可变变量:
$$v1;
常量:
定义形式:
define(“常量名”, 值);
const 常量名 = 值;
const C1 = 1+2;
使用形式:
直接使用常量名;
echo PI;
constant(“常量名”)
echo constant(‘PI’);
判断常量是否存在: defined(“常量名”)
预定义常量:
PHP_INT_MAX(php中的整数的最大值)
魔术常量:
__DIR__
__FILE__
__LINE__
4. 数据类型
4.1. 数据类型分类与概述
4.1.1. 标量类型:
标量类型也可以理解为“基本类型”,“简单类型”。
标量类型包括如下4种:
字符串类型:string
就是一串字符,当做一个整体,表示一个连续有确定顺序的字符串。
整数类型:integer, int
浮点数: double,float
就是数学上的小数。
布尔类型: boolean, bool
表示某种只有两个状态(可能值)的数据,比如性别,是否毕业,吃没吃饭;
4.1.2. 复合类型:
就是“数组”(array)和“对象”(object)两种。
4.1.3. 特殊类型:
空类型null: 有且只有一个数据可以使用,那就是null
资源类型resource:表示一种外部的可供php使用(操作)的资源(比如图片,数据库,文件等)
4.2. 整型integer/int
4.2.1. 四种书写形式
可以有4种直接书写的形式:
10进制形式:
$n1 = 123;
8进制形式:
$n1 = 0123; //以0开头,只能出现0-7这8个数字
16进制形式:
$n1 = 0x12A34; //以0x开头,可以出现0-9,A-F这16个数字
2进制形式:
$n1 = 0b1011011010; //以0b开头,只能出现0和1这2个数字
下表为进制对比:
10 进制 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 |
8 进制 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 20 |
16 进制 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | A | B | C | D | E | F | 10 |
2进制 | 0 | 1 | 10 | 11 | 100 | 101 | 110 | 111 | 1000 | 1001 | 1010 | 1011 | 1100 | 1101 | 1110 | 1111 | 10000 |
4.2.2. 进制的相互转换
直接通过系统函数来进行,能完成:
10进制转为2, 8, 16进制:
decbin():将10进制转为2进制
decoct():将10进制转为8进制
dechex():将10进制转为16进制
或:
2, 8, 16进制转为10进制:
bindec():将2进制数字字符串转为10进制
octdec():将8进制数字字符串转为10进制
hexdec():将16进制数字字符串转为10进制
总结一下进制转换的单词:
dec:10进制
oct: 8进制
hex: 16进制
bin: 2进制
进制转换案例:
表单上有个输入框,一个下拉列表(包含6种转换),以及一个按钮“转换”。实现可灵活进行进制转换的功能。
思考题:
怎么将一个8进制的数, 转换为16进制?
4.3. 浮点型double/float
浮点数就是相当于数学上的“小数”
两种书写形式:
常规形式(带小数点):
$f1 = 0.1; //或者1.23; 123.0;
科学计数法形式(带e):
$f2 = 1.23e3; //表示1.23 乘以10的3次方
$f3 = 123e2; //这个也是浮点数,虽然其结果值是一个“整数”(12300)
特别注意:浮点数不要随便做相等比较(==):因为浮点数进行相等比较,是“不可靠”的:
$v1 = 0.1 + 0.2;
$v2 = 0.3;
问:$v1和$v2相等吗?
那怎么办?
需要在考虑精度的基础上,将浮点数转换为整数,然后进行“比较大小”,此时,在精度范围内,如果相等,我们就认为是相等的。将上述程序改造为:
4.4. 布尔型boolean
只有两个数据值: true, false(不区分大小写)
在需要当做“布尔值”进行判断或比较的时候,以下数据会被当作布尔值的 false:
false, 0, 0.0, “”, null, ‘0’, 空数组
其余都被当做布尔值的 true。
常见应用代码类似这样:
$v1 = 某某值;
if( $v1 ) { //此时,如果$v1为上述值之一,就会当做false,不执行其中的代码。
。。。代码。。。
}
//而对于其他值,就会当做true,因此就会执行其中的代码。
1.1.字符串型string
可以使用单引号或双引号来表示(引起来)。
表示一串“连续的字符”,最短的字符串是“空字符串”,比如: $str1 = “”。
注意:这个不是空字符串: “ ”, 因为其中包括了1个空格字符。
$name = “张三”;
$edu = ‘北京大学’;
$title = “关于微信应用的几个改进建议”; //文章标题
$v1 = ‘’; //这也是字符串(空字符串), 跟null不同!!!
$v2 = ‘123’; //这还是字符串
$v3 = “false”; //这仍然是字符串
特别注意:
双引号字符串中,如果出现“$”符号,则该符号后的连续字符(单词)会被识别为一个变量名。
如果识别成功(即确实存在该变量),则会将该变量转换为实际内容。
如果识别失败(即实际没有该变量),则会报错。
只有两个数据值: true, false(不区分大小写)
在需要当做“布尔值”进行判断或比较的时候,以下数据会被当作布尔值的 false:
false, 0, 0.0, “”, null, ‘0’, 空数组
其余都被当做布尔值的 true。
常见应用代码类似这样:
$v1 = 某某值;
if( $v1 ) { //此时,如果$v1为上述值之一,就会当做false,不执行其中的代码。
。。。代码。。。
}
//而对于其他值,就会当做true,因此就会执行其中的代码。