变量类型
在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变量有一个特点,在第一次函数调用声明之后存在,且不随函数结束而结束,当函数再次调用时,可以直接利用上次结果