PHP语言基础
php程序结构
1
2
3
4
5a echo "标准结构"; //推荐写法
b echo "简短风格"; //需修改php.ini文件 short_open_tag=on
c <% echo "asp风格" %> //需修改php.ini文件 asp_tags=on
d <script language="php"></script>
php的结束符 如果后面没有其他代码 可以省略程序的注释
a /*多行注释*/ 不允许嵌套
b //或# 单行注释 (php代码每一行都必须以分号;结束)
变量
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
391.变量名以$开始
2.变量的名称声明时一定要有意义
3.以字母或下划线开头,不能以数字开头,不能有运算符号
4.变量的名称区分大小写(驼峰式命名方式)
a. var_dump()查看变量的类型和内容(数据结构)
b. isset()判断变量是否存在 测试被设置为null的值或unset函数处理过的变量时 返回false
empty()判断变量是否为空 "" "0" 0 NULL false array()
尽量使用!empty() 判断是否存在
d. unset()删除一个变量(销毁变量名) 断开变量名跟数据之间的引用关系
e. gettype()获取变量类型 boolean integer double string array object resouce NULL
f. 判断是否是某类型 is_int() is_bool() is_float() is_object() is_array() is_resource()
is_null() is_numeric() is_callable() 是否是有效的函数名
常见命名法
1.驼峰命名法 首单词小写 其后每个单词首字母大写 $myName
2.帕斯卡命名法 每个单词首字母大写 $MyName
3.下划线分割法 每个单词小写,之间用下划线分割开 $my_name
变量作用域
1.全局变量 定义在函数之外,作用于整个PHP文件(内部使用必须用global声明)
声明在调用之前,脚本结束(浏览器关闭)即释放
2.局部变量 定义在函数之内或形参,只限于内部使用,在函数外不能被使用
调用几次声明几次,释放(销毁)几次
3.静态变量 用static声明,在函数第一次调用结束后仍保留变量值(存在),且不会消失
静态变量的初始化只是在第一次遇到时被执行,以后不再执行初始化操作
变量的生存周期
即从变量被声明的那一刻起,直到程序脚本运行结束,变量随之释放
可变变量
使用一个变量的值作为另一个变量的名称
$liubei='河北人';
$laoda='liubei';
$paihang="laoda";
echo $laoda,$$laoda,$$$paihang; // liubei 河北人 河北人
引用变量&
1.只有变量才有地址,只有变量才能有引用 (引用相当于快捷方式)
2.一个变量发生变化,另一个也跟着发生变化
3.在使用unset()函数时,如果有引用关系,只是解除了这种引用关系,
只删除一个名字,另一个还在
4.如果两个变量是引用关系,一个变,另一个也变,但是如果给其中
一个引用,不是普通的值,而是一个新的引用,则改变引用关系。八种原始数据类型
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38A:四种标量类型
1.布尔型(boolean)
特殊情况下的false:布尔值 false|整数值 0|浮点型 0.0|字符串 "" "0"| 数组 array[]|
null值 所有其他值都被认为是true(包括任何资源)
2.整型(integer)
整型数可以用八进制,十进制,十六进制来表示 八进制以0开头,十六进制以0x开头
十进制 123 1*100+2*10+3*1 八进制 0123 1*64+2*8+3*1 //23
十六进制 0x123 1*256+2*16+3*1 //291
二进制 是由2位16个字节表示 从右往左依次2的倍数 5 0000 0101
最高位为1时不指定符号则为负数 ~5 //-6 <=(255-5-256)
如果超出int所能表示的最大范围(-2147483648~+2147483647),将会被当做float型处理
3.浮点型(float)
浮点型两种格式 标准格式 3.1415 科学计数法 31415e-4
浮点型的数值是一个近似值(不精确),应尽量避免浮点型之间的比较大小
4.字符串(string)
单个字符和多个字符都是字符串,字符串没有长度限制,在单引号中不能使用单引号,
在双引号之间不能使用双引号(除非经过转义字符)
B:两种复合类型
1.数组(Array)
2.对象(Object)
C:两种特殊类型
1.资源(Resource)
2.Null 三种情况 a.没有赋任何值 b.被赋值为null c.被unset()函数处理过的变量
伪类型 mixed $a 说明一个参数可以接受多种不同的类型
number $a 说明一个参数可以是int或float
callback $a 说明一个参数可以是函数或一个对象的方法
数据类型之间的转换
1.强制转换
getType(变量);获取变量的类型 强制转换时割舍小数位
a.setType(变量,类型)----将原变量类型给转换了
b.在变量使用时,前面加上类型符号(int)$str---在赋值时给了新变量一个新类型,
原变量类型不变
c.intval() floatval() strval()
2.自动转换
小类型自动转化为大类型 字符串会转换为整型或浮点型 布尔型和null会转换为
整型或浮点型
字符串转整型时,没有以数字开头时转为0,有数字或科学计数法开头时转为整型数字
布尔型false会输出为空,true会输出为1常量的声明和使用
1
2
3
4
5
6
7
8
9
10
111.常量一旦被声明,这个常量值就不会被改变,不能重新赋值,不能销毁 范围是全局的
只支持4种标量数据类型(bool int float string) 不能使用$符
2.使用函数define('常量名',常量值)声明 使用defined('常量名')判断是否被定义
ex: define("HOST","www.baidu.com",true); defined('host')?1:0
3.常量名称默认是区分大小写的,习惯上要全大写define(常量名,常量值,true or false)
true(不区分大小写) false(默认区分大小写)
4.获取常量值 直接使用常量名(不要加$) ROOT 使用constant('ROOT')函数获取
ex: echo host; echo constant("host");
5.预定义常量 __FILE__ 获取当前文件的路径(两个下划线) __LINE__获取当前行数
PHP_VERSION 当前PHP服务器的版本
引用赋值 $a=&$b 把$b的地址引用赋给$a $a改变$b也改变
PHP 运算符
算术运算符
1
2
3
4+ - * / %求模的时候正负值取决于被除数的正负
++ -- 自增或自减 对于布尔值没有效果 对于字符串自增或自减属于升序或降序
$a++或$a-- 先用(赋值)再加 结果不变 ++$a或--$a 先加再用(赋值) 结果加1或减1
++$a比$a++ 效率高 $a++ 会分配临时变量来保存 $a 然后再++赋值运算符
把右边的值赋给左边的变量或常量
字符串运算符
1
2连接运算符 ".", 将左右两个字符串连接在一起
连接赋值运算符 ".=" 将右边的字符串加到左边的字符串后面比较运算符
1
2比较运算符的结果是一个布尔型 < > <= >= ==
不等于 != 恒等于 === 值和类型都相同 非恒等于!== 数值不相等或类型不相同逻辑运算符
1
2
3
4
5and或&& 逻辑与 当两边都为true时,才返回true,否则返回false
or或|| 逻辑或 只要有一个为true时,返回true,都为假时才返回false
xor 逻辑异或 当两个操作数一个为真一个为假时,才返回true
! 逻辑非 单一操作数为true,则返回false
逻辑运算的短路特性:defined("PI")||define("PI",3.14)位运算符
1
2
3
4对二进制位从低位到高位对齐后进行计算
& 按位与 | 按位或 ^ 按位异或 ~ 按位取反
<< 向左移n位 数字增大2的n次方(乘以2的n次方) >>向右移位 数字减小2倍(除以2)
按位运算不会出现短路三元运算符(条件运算符)
1
2表达式1?表达式2:表达式3
如果表达式1为真则执行表达式2,表达式1为假则执行表达式3
PHP语句
程序的3种控制结构 顺序结构 分支(选择)结构 循环结构
条件控制语句
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19if语句 if..else语句
if(expr){ if(expr){
statement; statement;
}只有一条语句时,大括号可以省略 }else{
statement;
}
elseif语句 switch...case语句
if(expr1){ switch(变量){
statement1; case 值1:statement1;
}elseif(expr2){ break;
statement2; case 值2:statement2;
}elseif{ break;
statement3; case 值3:statement3;
}else{ break;
statement4; default:statement;
} }
a.switch(变量) 变量的类型只能是整型或字符串
b.switch case 适合单个值匹配 elseif 适合判断范围时使用
c.break是退出switch使用的,如果需要同时匹配多个值可以使用多个case而不加break循环控制语句
1
2
3
4
5
6while循环语句 do...while循环语句 for语句
while(expr){ do{ for(expr1;expr2;expr3){
statement; statement; statement;
}//条件为真假时用while }while(expr); }expr1变量的初始赋值,expr2为循
先执行表达式,表达式为 先执行循环体,在判断表 环条件,expr3为变量递增或递减
true时,才执行循环体 达式,成立再执行循环体 用于已知循环次数多条件循环操作跳转控制语句
break语句 break n; 指定要跳出几层循环 结束循环结构
continue语句 continue n; 指定要跳出几层循环 只能终止本次循环
exit()
die()函数是exit()函数的别名 输出一条信息 并退出当前脚本
PHP函数的使用
函数是一段完成指定任务的已命名代码块
自定义函数
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20function function_name($arg1,$arg2){
fun_body;
return arg_n;
}
function_name();//函数的调用可以在函数前也可以在函数后面
1.函数名要有意义,函数名不区分大小写,不能重复定义,和保留字相同的名称不能使用
2.被传入的参数称为实参,而函数定义的参数成为形参,参数可有可无,可以有多个","用逗号分隔
3.函数返回值return后面紧跟要返回的一个值 不会直接输出 如果不写return则返回NULL
a.可以终止函数后面不执行 b.返回一个结果
4.判断函数是否存在 function_exists()
函数的参数的传递方式
1.按值传递方式 实参的值不会发生改变
2.按引用传递方式 将实参的内存地址传递给形参,当形参在函数中有任何改变时,实参的值也
会发生变化.如果形参是引用参数,调用函数时,必须传一个变量不能是数值
3.默认参数 默认参数必须放在非默认参数的后面 (实参和形参是按顺序对应传递数据的)
4.不定参数 func_get_args() 将传递给脚本函数的所有参数当作数组返回
PHP函数对自身的调用成为递归调用
回调函数: 指调用函数时,将另一个函数作为参数传递给调用的函数
变量函数:如果将一个函数名称赋给一个变量 在变量后加上()就会调用对应的函数
function add(){ } $var="add" $var()系统函数
1
2
3
4
5
6
7
8
9
10引用文件(包含文件)
include与require语句的区别
1.include调用外部文件只有程序执行到该语句才调用
require只要程序一执行,就会立刻调用文件
2.调用文件时,若没找到require语句会输出严重错误,立即终止脚本的处理.
而include则会输出一个警告,不会终止脚本的运行,后面的可以继续执行
include_once与require_once的区别
都是确保被包含文件只能被包含一次.避免因多次包含而导致函数的重复定义而产生的错误
不同的是在调用外部文件发生错误时,include_once产生一个警告而require_once则导致一个
致命错误常用数学函数
1
2abs() 绝对值 pow(n,m) n的m次方 max() 求两个以上数的最大值
min() 求两个以上数的最小值 rand(n,m) 返回n和m之间的随机数
PHP日期和时间
更改PHP语言中的时区设置
1
2
31.修改php.ini文件中的设置,将date.timezone="Asia/Shanghai",重启Apache服务器
2.在程序中添加如下函数 date_default_timezone_get()获取当前时区
date_default_timezone_set(PRC或Asia/Chongqing或Asia/Shanghai)获取当前时间的时间戳
1
2
3echo time()."<br />"; //返回时间戳 1470457489
echo microtime()."<br />"; //0.11247900 1470457489
echo microtime(true)."<br />"; //1470457661.9925微秒的时间戳 计算程序运行的时间将时间戳格式化
1
2
3
4date('Y-m-d H:i:s',time()); date("Y年m月d日 H:i:s",time());
Y 四位完整的年份 m 表示月份 d 月份中的第几天有前导0
l 英文格式星期 N 星期中的第几天
H 24小时格式有前导0 i 有前导0的分钟数 s 有前导0的秒数获取指定日期的时间戳
1
2
3
4
5
6
7mktime(int hour,int minute,int second,int mounth,int day,int year);
//取得指定日期的时间戳
ex: echo mktime(14,35,20,11,27,2016)."<br />"; //1470381856
strtotime();获取英文格式日期时间字符串的时间戳(相对于当前时间)
//将英文文本的日期时间转化为unix时间戳
ex: strtotime('now'); strtotime('now -1 day') 前一天的时间戳
checkdate(int month,int day,int year)检验日期的有效性
PHP图像与图形
1 | 输出图像必须加header('Content-type:image/gif'),屏蔽notice错误(变量未声明导致乱码) |
PHP异常处理
1 | 1.语法错误 2.运行时错误 3.逻辑错误 |
PHP中的会话控制
1 | Cookie是一种由服务器端发送给客户端的片段信息,存储在客户端浏览器的内存或硬盘 |
PHP正则表达式
1 | 正则表达式就是一个匹配模式的字符串,必须在函数中使用 |