变量类型
在PHP中,一共存在8种变量类型:整型,浮点型,字符串,布尔,数组,对象,null,资源
- 如果一个变量为null,那么在它被声明后,该变量既不会有值,也不会被标注类型
变量检测
isset()函数可以检测变量是否存在,存在返回true,不存在或变量为null返回false
获取变量类型
gettype()函数可以用来获取变量类型
判断是否是我们想要的类型用is_int(),is_float()等等
打印变量
echo:适合打印字符串和数字
print_r:适合打印数组
var_dump:所有类型都可以,既可以打印值同时也会打印变量类型
变量类型转换
PHP中变量的类型是可以随时转换的,非常灵活,最常见的是字符串与数字的转换,或是字符串/数字——>布尔值的转换1
2
3
4//字符串到数字的转换:从左到右截取,直到碰到不合法的数字,截取出来的部分转换成数字再参与运算
$a = "12hello";
$a = $a + 3;
var_dump($a); //int 15
以下值都被当成布尔型的假,而其他值都被当成布尔型的真
“” (an empty string)
0 (0 as an integer)
0.0 (0 as a float)
“0” (0 as a string)
NULL
FALSE
array() (an empty array)
$var; (a variable declared, but without a value)
变量赋值
传值赋值:变量各有自己的内存空间,传值后不影响原有变量的值【两个人看两台电视】
引用赋值:两个变量指向公共的内存空间,一个变化,另一个也会变化【两个人看一台电视】
变量销毁
unset()函数可以用来销毁变量,但是当两个变量都指向同一个内存空间【即引用赋值】时,销魂其中一个变量,另一个依然存在,并不会被销毁。当所有指向这个内存空间的变量都被销毁时,该公共内存空间才会被回收。
动态变量
1 | $liubei = "河北"; |
算术运算符
除数不能为0
两个数相加的和如果超出了 integer 的范围,将会被解释为 float
取模运算时,结果的正负仅取决于被除数
比较运算符
凡运算,必有运算结果:比较运算符的运算结果是布尔类型1
2
3
4$a = 5;
$b = "5";
var_dump($a == $b); //true
var_dump($a === $b); //false 全等于不仅要求值相等,类型也必须一致
三元运算符
1 | //求两个数中较大的数 |
逻辑运算符
&&:都为真,值才为真
||:只要有一个为真,就为真
递增递减运算符
1 | $b = 5; |
赋值运算符
1 | //一个赋值运算有两个作用:1是把3赋给$a;2是返回运算结果,即3 |
continue和break
continue:跳过本次循环
break:直接终止循环
函数概念
一段封装好的代码,可以随时调用
返回值是只得到这个值,并不会直接输出
函数定义格式
1 | function 函数名(){ |
命名规范:命名规则和变量是一致的,但是函数不区分大小写
函数的调用过程与返回值
函数调用时,代码执行权进入函数,当函数所有语句执行完毕,函数结束,交回执行权,或者函数碰到return语句时,函数返回,教会执行权。1
2
3function test(){
return "hello","world"; //错误,直返return返回一个值
}
函数传参方式
1 | function t($a){ |
函数中变量的作用域
PHP页面中声明的变量叫“全局变量”,函数内部的变量叫“局部变量”
全局变量无法与局部变量进行交互,只有传参时赋值可以
1
2
3
4
5
6
7
8
9
10
11
12
13//如果想局部变量访问全局变量,就需要使用关键字global
$a = 22;
function t(){
global $a;
echo $a;
}
t(); // 22
//超全局变量,在页面的任何部分,包括函数,方法等,都可以直接访问
function t2(){
print_r($_GET);
}
t2();
动态调用函数
可用用变量的值当做函数名,并调用函数1
2
3
4
5
6
7
8
9
10function wel(){
echo "wlecome";
}
function beat(){
echo "beat";
}
$heart = "wel";
$heart(); // welcome
字符串定义方式
1 | //定义短字符串 |
单双引号的对比
单引号只转义两个符号:’ 和 \
双引号可以解析变量
单引号不需要解析字符串内有没有变量,需要转义的内容也少,速度比双引号要快,优先使用单引号
heredoc与nowdoc的区别就是单引号与双引号的区别
数组的声明方式
数组是一种复合数据,可以装下多个值,每个值用不同的键来区分1
2
3
4
5
6
7$arr = array('001'=>'春','002'=>'夏','003'=>'秋','004'=>'冬');
//索引数组:键不必有特殊意义,纯数字,这种叫“索引数组”
$arr = array(1=>'东',2=>'西',3=>'南',4=>'北',);
//关联数组:字符串做键,一般能体现该单元的内容
$stu = array('name'=>'小明','age'=>'20');
//多维数组:数组里面有数组
$arr = array(0=>'a',1=>array('stu'=>'li','bag'=>array('语文','数学')));
数组键的规则
如果不声明键,会从0,1,2,3……递增来生成键
如果已经存在1或几个数字键,则从最大的数字键,递增生成数字键
如果键声明重复了,后面的值覆盖前面的值
键可以是整数(浮点数会转化为整数)也可以是字符串,如果字符串的内容恰好是整数,也理解成整数
操作数组单元
1 | $arr = array('a','b','c'); |
遍历数组
1 | //对于0,1,2……递增的索引数组,使用for循环 |
数组游标操作
1 | //取当前游标指向的数组单元的值 |
超级全局变量
$_GET:地址栏上获取的值
$_POST:POST表单发送的数据
$_REQUEST:既有GET也有POST的内容,如果含有相同的数据,POST会覆盖GET,而这可以再php.ini配置文件中进行设置更改
$_ENV:操作系统的相关环境信息,容易暴露服务器信息,一般不允许打印,可通过修改php.ini实现
$_SERVER:端口,IP地址等环境信息
$_DLOBALS:是对全局变量花名册的一个别名,通过该变量,可以任意访问全局变量,简单说,就是将所有全局变量变成其数组里的一个单元
常量系统
1 | define('PI',3.14); |
命名规范:与变量一样,不过习惯上全部大写
声明后,值不能修改,也不能重新声明,也不能销毁这个变量
常量名前不加$
常量一旦定义后,在页面的任何位置都可以访问
1
2
3
4
5
6
7
8//检测常量是否存在
defined('PI');
//动态常量名
define('PI',3.14);
$pai = 'PI';
echo constant('PI'); //3.14
echo constant($pai); //3.14
文件包含
文件包含的作用在于代码的重用,我们可以把常用的代码写到一个文件里,当需要这些代码工作时,直接引入这些文件就可以了
include(); include_once(); require(); require_once();
_once的作用:只引用一次,如果之前已经引用过,就不再引用,但是不叫_once执行速度快一些
include和require的区别:如果引入的文件不存在,include尽量往下执行,报warning,require则直接报fatal error,脚本立即停止执行
浮点数不精确
1 | if((0.3 - 0.2) == 0.1){ |
某些小数在十进制下,是有限的,转成二进制要无限循环,因此,损失一些精度,导致浮点数计算和数学上结果不一致
逻辑运算的短路特性
1 | $a = 3; |
递归
1 | //0-100求和 |
静态变量
static变量有一个特点,在第一次函数调用声明之后存在,且不随函数结束而结束,当函数再次调用时,可以直接利用上次结果