超级全局变量:
$GLOBALS 所以全局变量数组
$_SERVER 服务器环境变量数组
$_GET 通过GET方法传递给该脚本的变量数组
$_POST 通过POST方法传递给该脚本的变量数组
$_COOKIE cookie变量数组
$_FILES 与文件上载相关的变量数组
$_ENV 环境变量数组
$_REQUEST 所有用户输入的变量数组
$_SESSION 会话变量数组
常量一旦定义就不能改变,通常用define()定义
------------------------------2016.9.21-----------------------------------
操作符、数学函数、foreach、each、list
单引号:只能插入字符串,理论上速度会快些(常用)。
双引号:可以使变量和转移序列都会得到相应的解析
**********************
操作符:
0==“0” 这个返回为true,因为操作数相等
0===“0” 这个返回为false,因为数据类型不同
**********************
三元运算符:
$total = 80;
$sum = $total>50 ? '成功' : '失败' ;
echo $sum;
?>
**************
错误抑制符 @ :
//如果输出报错就不显示出来
$a = @(100/0);//不过在开发中,最后讲错误都暴露出来
echo $a;
*****************
操作符优先级:为了避免优先级混乱,可以使用括号币开优先级
********************
在循环里面:
break 退出当前循环
continue 退出当前本次循环,并且继续下次循环
exit 退出整个程序
********************
生成整数随机数: rand([int min,int max]);
生成更好的随机数(推荐,速度更快): mt_rand([int min,int max]);
********
数字格式化数据:
$i=123456789;
//括号内第一位是变量,第二位是保留小数点后几位,第三位和第四位只是用什么符号(建议不动)
$si = number_format($i,2,".",",");
echo $si;
*********
数学函数:
abs() 绝对值
floor() 舍去法取整
ceil() 进一法取整
round() 四舍五入
min(1,2,3,4,5,6,7,8) 求最小值或数组中最小值
max(1,2,3,4,5,6,7,8) 求最小值或数组中最小值
*********
打印数组: print_r();
$userNames可以理解为一个数组变量,而$userNames[x]可以理解成数组变量下的小变量
$userNames=array('小A','小B','小C','小D','小E');
//显示数组中所有个数:count()
//通过for循环来显示数组里的所有值
for($i=0;$i
echo '
';
}
//foreach只能用于遍历数组,所以要先进行判断 is_array()进行判断
if(is_array($userNames)){
//如果key不是从0开始,或者说,压根不是数字,那么无法用for循环来实现显示数据列表
//通过foreach循环来遍历数组,这方式好处,不需要去考虑key
foreach($userNames as $key => $value){
echo $key.'---'.$value.'
';
}
}else{
echo '普通变量';
}
************
自定义键数组:
$userNames=array('A'=>'小A','B'=>'小B','C'=>'小C','小D','小E');
//此时小A的key就是A(依次同理)
echo $userNames['A'];//打印出来的就是小A
echo $userNames[0];//打印的会是小D
追加数组:
$userAges['小A'] = 19;
$userAges['小B'] = 25;
$userAges['小C'] = 35;
//和这样是一个意思: $userAges = array('小A' => 19,'小B' => 25,'小C' => 35);
***************
each() 函数返回当前元素的键名和键值,并将内部指针向前移动。
each循环的使用:
$userNames=array('A'=>'小A','B'=>'小B','C'=>'小C');
//两个感叹号,表示真实存在的数据转换成布尔值
while(!!$a=each($userNames)){
//这里,我们使用each来循环出来所有的数据相当于:
//$a = array([0] =>A,[1] =>小A,[value]=>小A,[key] =>A);
echo $a['key'].'---'.$a['value'].'
';
}
reset();
**********************
list() 函数用于在一次操作中给一组变量赋值。
list只能认识下标(key)为数字的,自定义的字符串key是无法使用list来识别的
$a = array('aaaa','bbbb','cccc','dddd');
list($var1,$var2,$var3,$var4) = $a;
echo $var4;//打印了dddd
------------------------------2016.9.22-----------------------------------
数组排序
一、这些是正向排序:
(1)sort()函数可以将数据按字母顺序和按数字顺序排序
(2)当数组内既可以是数字又可以是字符串的时候,就可以加参数,如下:
$numbers = array(2,12,13);
//当数字
sort($numbers,SORT_NUMBER);
//当字符串
sort($numbers,SORT_STRING);
(3)如果想保持原始key就使用asort(): asort($numbers);
(4)根据key来排序就是使用: ksort($numbers);
(5)把数组打乱随机排序: shuffle($numbers);
二、反向排序就在前面加个r,如下:
rsort(); 、arsort(); 、 krsort();
三、将原来的数组反向排序,但要新建一个数组,操作如下:
$numbers = (1,4,2,6,3);
$a =array_reverse($numbers);
print_r($a);
//打印结果: 0=>3, 1=>6, 2=>2, 3=>4, 4=>1
四、在数组开头和结尾插入和删除数据、取数组中的随机数可以设置个数
(1)开头:array_unshift($numbers,'100');
(2)删除开头元素
array_shift($numbers);
(3)结尾:array_push($numbers,'1001'');
(4)删除结尾元素
array_pop($numbers);
(5) array_rand(数组名,随机的个数) 函数从数组中随机选出一个或多个元素,并返回:
$userNames = array('aaaa','bbbb','cccc');
$a = array_rand($userNames,2); //只随机key
echo $userNames($a[0]); //根据$a传来的key输出第一个随机数
echo $userNames($a[1]); //输出第二个随机数
五、数组的指针操作
(1)获取指针的当前元素,不会将指针移到下一步: current() 有个别名: pos()
(2)获取指针的当前元素,将指针移到下一步: each()
(3)一开始就指下一步: next()
(4)将指针指向第一个单元: reset()
(5)讲数组指针倒回一位: prev()
(6)count()和sizeof()都是统计数组下标个数
(7)统计数组中所有的值出现的次数: array_count_values()
便于理解,例如:
$a = array(1,2,3,12,1,2);
array_count_values($a);
//结果:1=>2 ,2=>2,3=>1,12=>1
(8)通过标量函数将字符串键(key)设置成变量,然后将值赋给了这个变量: extract()
$fruits = array('a'=>'apple','b'=>'banner','c'=>'orange');
extract($fruits);
echo $a,$b,$c;//将数组中key赋值给变量$a,$b,$c
*******************************
函数命名
1.函数名不能和已有的函数名重名
2.函数名只能包含字母、数字和下划线
3.函数名不能以数字开头
变量名相同,函数按引用(&)函数内的值就可以改变函数外面的值
不推荐使用:函数没有参数时就不能引用了,可以将变量在函数内设置成全局变量(global $a;)
使用超级全局变量(说白了就是数组):$GLOBALS['a']=5;
include_once ' '; :引入文件
**********************************
字符串函数
一、字符串格式化
(1)echo trim(' php ');
//trim():清除两边多余的空白
echo ltrim(' php ');
//ltrim():清除左边的空白
echo rtrim(' php ');
//rtrim():清除右边的空白 别名:chop()
(2)转换特殊字符:htmlspecialchars();
(3)对即将插入数据库的字符串,把有问题的字符处理一下:addslashes();
如果要把这个字符拿出来,就要去除处理:stripcslashes();
(4)将英文字符串转换为大写: strtoupper();
将英文字符串转换成小写: strtolower();
将第一个英文字母转换为大写: ucfirst();
将每个单词第一个字母转换为大写: ucwords();
(5)填充字符串的右侧,到 30 个字符的新长度:
$str = "Hello World";
echo str_pad($str,30,".");//打印Hello World...................
?>
------------------------------2016.9.24-----------------------------------
二、操控字符串
切割和组合函数:
(1)explode():使用一个字符串分割另一个字符串(返回的是数组)
//第一个参数是分割字符串,第二个参数是要被分割的字符串
$email = '[email protected]';
$email_array = explode('@',$email);
(2)implode()或join():组合
$email = '[email protected]';
$email_array = implode('@',$email);
strtok()函数一次只从字符串去除一些片段(称为令牌)。对于一次从字符串中取出一个单词的处理来说,strtok()函数比explode()函数的效果更好
$str = 'I,will.be#back';
$tok = strtok($str,',.#');
while($tok){
echo $tok.'
';
$tok = strtok(',.#');
}
------------------------------2016.9.25-----------------------------------
(1)substr()函数:允许我们访问一个字符串给定起点和终点的字符串。
$str = '[email protected]';
//中间的参数表示开始的位置,最后一个参数,是取出的个数
echo substr($str,0,5);
//打印结果:laiji
(2)分解字符串:str_split()返回一个数组,其中各数组元素分别是字符串参数中的一个字符串
//一个个字节拆开,中文不太适合
print_r(str_split('This is a Teacher!'));
(3)逆置字符串:strev()可以将一个字符串逆反过来。
//不太适合中文
echo strrev(This is a Teacher!);
三、字符串的比较
(1)strcmp():比较两个字符串,等于就返回,第一个大于第二个就返回正数,第一个小于第二个就返回一个负数,这个函数区分大小写。
(2)strcasecmp():除了不区分大小写之外,其他和strcmp()一样
(3)strnatcmp():不区分大小写,并且按照自然排序
(4)strnatcasemp():区分大小写,并且按照自然排序
(5)strspn():求两个字符串之间相同的部分
//后面两个数字的参数,是从第几位开始,取多少位
echo strspn('lai','[email protected]',0,3);//打印3
四、字符串的替换
(6)strlen():字符串的长度
echo strlen('hello');//打印5
(7)substr_count():字符串出现的频率
echo substr_count('[email protected]','i');//打印出现2
(8)strstr():从指定的字符串开始输出之后的字符串,别名:strchr()
echo strstr('[email protected]','@');//打印@126.com
(9)stristr():比strstr()多了一个不区分大小写,其他一样
echo stristr('laijingFeng','f');//打印Feng
(10)strpos():查找某字符串最先出现的位置
echo strpos('[email protected]','g');//打印6
(11)strrpos():最后出现的位置
echo strrpos('[email protected]','g');//打印10
(12)str_replace():字符串取代
//第一个参数表示要查找的字符串,第二个表示替换成的,第三个是目标
echo str_replace('Lee','Wq','This is Lee!');
(13)substr_replace():指定位置替换
//参数二是替换成,参数3是开始位置,参数4是取几个出来
echo substr_replace('[email protected]','***','0','5');
五、处理中文字符
(1)mb_strlen 对应的函数为strlen() 求字符串的长度
echo mb_strlen('我是赖劲峰','UTF8');//打印4(原本是8个字符)
(2)mb_strstr 对应的函数,为strtr() 求某字符串到结尾的字符(取中文区别不大)
(3)mb_strpos 对应的函数为strpos() 求出字符最先出现处
echo mb_strpos('我是赖劲峰','是','0','UTF8');//打印1
(4)mb_substr 对应的函数为substr() 取出指定的字符串
echo mb_substr('我是赖劲峰','1','2','UTF8');//打印是赖
(5)mb_substr_count() 对应的函数为substr_str() 返回字符串出现的次数(取中文区别不大)
------------------------------2016.9.26-----------------------------------
一、正则表达式语法(Perl风格)
//第一个参数,表示模式,表示匹配模式(就是和字符串去比较、匹配)
//第二个参数,表示字符串
//如果整个函数模式和字符串比较后匹配了,那么返回真(true)1,否则返回假(false)0
//按照什么规则??按照模式来匹配,只有模式全部通过,那么就通过
//*********匹配和相等是两个概念,只要字符串中包含规则模式就匹配
$mode = '/php/';//规则模式
$string = 'sdphpas';//字符串
if(preg_match($mode,$string)){
echo '匹配';
}else{
echo '不匹配';
}//打印匹配
二、正则表达式中的元素
包含三种元素:量词、元字符、修饰符
(1)量词(使用在规则模式)
+号的意思,是前导字符,一个或者多个
$mode = '/ph+p/';//规则模式
*号虽然可以是零个,但是前导字符不能更改,更改了,就不匹配了
$mode = '/ph*p/';//规则模式
?号零个和一个,多个前导字符就不行
$mode = '/ph?p/';//规则模式
.的意思是,任意一个字符,所以,两个点,就是任意两个字符
$mode = '/ph.p/';//规则模式
.*表示前导任意字符,并且零个或者多个
$mode = '/ph.*p/';//规则模式
p{3}表示,前导必须是3个
$mode = '/ph{3}p/';//规则模式
p{3,5}表示,前导必须是3-5个
$mode = '/ph{3,5}p/';//规则模式
p{3,}表示,前导至少3个p,可以多不能少
$mode = '/ph{3,}p/';//规则模式
$符合,一般加在模式的字符串尾巴上,表示从尾巴开始匹配
$mode = '/php$/';//规则模式
^表示,从开头进行匹配
$mode = '/^php/';//规则模式
|表示选择符,有其中的一个就是匹配
$mode = '/php|asp|jsp/';//规则模式
(2)元字符
//[]中括号,是一种正则里的语法
//里面的东西表示任意一个即可
[a-z]表示小写26个字母中,随便其中一个
[A-Z]表示大写26个字母中,随便其中一个
[0-9]表示任何包含数字0-9的字符串
[abc]表示任何包含小写字母a、b、c的字符串
[^abc]表示任何不包含小写字母a、b、c的字符串
[a-zA-Z0-9]表示任何包含a-zA-Z0-9和下划线的字符串
\w表示任何包含a-zA-Z0-9和下划线的字符串
\W表示任何没有下划线和字母数字的字符串
\d表示任何数字字符,和[0-9]相同
\D表示任何非数字字符,和[^0-9]相同
\s表示任何空白字符
\S表示任何非空白字符
\b表示是否达到了单词边界
\B表示是否没有达到了单词边界
\表示正则中的特殊字符
------------------------------2016.9.28-----------------------------------
(3)修饰符
i:完成不区分大小写的搜索
m:在匹配首内容或者尾内容时候采用多行识别匹配
x:忽略正则中的空白
A:强制从头开始匹配
U:禁止贪婪匹配,只跟踪到最近的一个匹配符并结束
------------------------------2016.10.8-----------------------------------
三、Perl风格函数
(1)搜索数组中的相匹配的字符串
preg_grep()函数
(2)搜索模式,最后返回的是真或者假,1或者0来表示
preg_match()函数
电子邮件的小案例:通过拆分的方法分组
$mode = '/([\w\.]{2,255})@([\w\-]{1,225}).([a-z]{2,4})/';//模式不能缺少//
$string = '[email protected]';
if(preg_match($mode,$string)){
echo '电子邮件合法!';
}else{
echo '电子邮件不合法!';
}
(3)匹配模式的所有出现
preg_match_all('/php[1-6]/','sdfaphp1asdfasdphp5adsfasdphp8',$out);
//匹配全局正则
print_r($out);//打印结果是php1 php5 php8
(4)定界特殊的正则表达式:它在每个对于正则表达式语法而言有特殊含义的字符前插入一个反斜线
echo preg_quote('PHP的价格是:$150');
(5)(关键)替换模式的所有出现:它搜索到所有匹配,然后替换成想要的字符串返回出来。
//搜索匹配的结果,然后替换掉
//第一个参数,放的是正则的模式
//第二个参数,放的是替换掉的字符串
//第三个参数,字符串
echo preg_replace('/php[1-6]/','python','This is php5,this is php4');
//打印 This is python,this is python
(6)解决贪婪问题(例子)
//【】表示括号中的括号,而不是语法【a-z】
//.表示匹配任意字符一个,加上一个*号表示匹配零个或者多个
//用括号分为三组那么第一组就是\1,第二组就是\2,第三组就是\3
//第一个问题:第一个【b】和最后一个【\b】匹配了。
//解决贪婪的方法:U
$mode = '/(\[b\])(.*)(\[\b\])/U';
$replace = '\2';
$string = 'This is a [b]php5[/b],This is a[b]php4[/b]';
echo preg_replace($mode,$replace,$string);
(7)以不区分大小写的方式将字符串划分不同的元素:preg_split()用来分割不同的元素。
如果没有【】符号,就表示,要同时满足
preg_split('/[\.@]o/','[email protected]')
------------------------------2016.10.11-----------------------------------
PHP 日期和时间库
(1)验证日期:checkdate()函数
(2)格式化时间和日期:data()函数
(3)查看更多时间信息:gettimeofday()函数
(4)将时间戳转换成友好的值:getdate()函数
(5)获取当前的时间戳:time()函数
(6)获取特定的时间戳:mktime()函数
------------------------------2016.10.12-----------------------------------
(7)使用人可读的字符串转换成时间戳:strotime()函数
(8)获取当前文件最后修改时间:getlastmod()函数
(9)获取当前时区:date_default_timezone_get()函数
配置默认时区(上海时间):date_default_timezone_set('Asia/Shanghai');
(10)取得本地时间数据,返回一个数组(不好用):localtime()函数
(11)计算页面脚本运行时间,该函数返回的是时间戳和微秒数:microtime()函数
表单与验证
学习要点:1.Header()函数 2.接受及验证数据
Header()函数:建议放首行,如果不在首行页面有部分每起作用,可以启用缓存区 ob_start()
(1)用于重新导向指定的URL
(2)用于设置页面字符编码
------------------------------2016.10.13-----------------------------------
接收及验证数据
会话控制
学习要点:1.Cookie的应用 2.Session会话处理
一、Cookie的应用
使用Cookie的限制
1.必须在HTML文件的内容输出之前设置;
2.不同的浏览器对Cookie的处理不一致,且有时会出现错误的结果
3.限制是在客户端的。一个浏览器能创建的Cookie数量最多为30个,并且每个不能超过4KB,每个WEB站点能设置的Cookie总数不能超过20个。
------------------------------2016.10.16-----------------------------------
Cookie小案例:
二、Session会话处理
上传文件
学习要点:1.PHP上传配置 2.$_FILES数组 3.PHP上传函数
一、PHP上传配置
二、$_FILES数组
三、PHP上传函数
PHP提供了两个专门用于文件上传过程的函数:is_uploaded_file()和move_uploaded_file()
文件上传小练习:
处理图像
学习要点:1.创建图像 2.简单小案例
一、创建图像
创建图像:
------------------------------2016.10.17-----------------------------------
加载已有图像再加上水印:
MySQL数据库
学习要点:1.Web数据库概述 2.MySQL的操作 3.MySQL常用函数
MySQL常用数据类型:
MySQL的操作:
MySQL常用的函数:
SQL语句详解:
WHERE表达式的常用运算符:
------------------------------2016.10.18-----------------------------------
PHP操作MYSQL
增删改查:
其他常用函数:
------------------------------2016.10.19-----------------------------------
多用户留言系统
一、样式:
------------------------------2016.10.31-----------------------------------
OOP:
构造方法、普通方法、析构方法:
------------------------------2016.11.1-----------------------------------
封装:
常量:
静态:
instanceof:
public公共的,所以类都可以用。
private私有的,只能本类使用。
protected受保护的,子类可以使用。
继承和重写:
封装后,子类调用父类:
子类重写方法,并调用父类的方法:
final关键字:
抽象类和方法(abstract):
接口(interface):
------------------------------2016.11.2-----------------------------------
抽象类只支持单继承,接口支持多实现:
到底应该用抽象类还是接口呢?
如果要继承多个类的方法的规范,那么就用接口好了
如果要共享一个方法体内容,就用抽象类
多态:
使用Mysqli操作数据库
------------------------------2016.11.20-----------------------------------
1.索引数组取得结果集
$_row = $result->fetch_row();
echo $_row[3];
2.关联数组取得结果集
$_assoc = $result->tetch_assoc();
echo $_assoc['tg_username'];
3.索引+关联数组取得结果集
$array = $result->fetch_array();
echo $array[3];
echo $array['tg_username'];
4.使用OOP的方法fetch_object()
执行多条UPDATE的方法
执行三条查询语句再获取结果集