php学习笔记
一、字符串
1. 单引号不能识别插入的变量以及任何转义序列(定义纯字符串用单引号)
2. 双引号不能识别转义的单引号
3. <<< KKK
KKK;//必须顶格
这个可以用来输出HTML而无需转义
二、访问字符串
1.===(表示等同操作符则false与0不同)而==(表示相等操作符则false与0等价)
2.strpos函数用于返回一个字符串中要查找的子字符串出现的第一个位置,失败则返回FALSE(用===来判断与false相等)
3.换行用<br> \n不好使
4.
5
6.$varname=’dd’; $$varname=5;($dd=5)
7.常量不需要$符号,定义常量define(‘CONTAST’,10);
echo CONTAST;
8.算数运算符用于字符串时,会把字符串转换成数字,如果字符串头含有数字则等于该数字,否则为0
9.有实际值的变量或表达式前加@可抑制错误
10.反向双引号` `之间的命令当做服务器端的命令来执行,表达式的值就是命令的执行结果
10.数组遍历:
a. foreach($arr as $key=>$value)
echo $key.’==’.$value;
b. while($arr=each($a))
//each遍历一次之后数组指针到数组末尾,若想再次访问这个数组需要reset($a)才可以继续遍历
echo $arr[‘key’].’=’.$arr[‘value’];
c. $ip=’192.168.1.126’;
//list只能接受索引数组,数组中的元素个数必须与list参数个数一致且按索引下标的顺序遍历
list($a,$b,$c,$d)=explode(‘.’,$ip);
echo $d;
d. while(list($key,$value)=each($arr))//这种模式比foreach效率高
echo $key.’=’.$value;
11.gettype($a) 获取变量a的类型
settype($a,’type’) 把变量a的类型变为type类型
isset($a) 判断a变量是否存在
empty($a) 判断变量a是否为空//isset和empty检查用户正确填写表单
unset($a) 销毁a变量
12.exit彻底结束PHP程序
PHP6的新特性:
这些特性包括:
集成OpCache(OPcache通过对PHP的opcode进行缓存和优化,可以提高PHP程序的执行速度)
改善对64位环境的支持
支持Unicode
清理内部API
提升代码质量,做到Warning-Free
改善OPcodes、编译器、运行时
JIT编译器(LibJIT?)
支持Annotation(注解?)
命名自变量(Named argument)
不同等级的类型提示
支持HTTP 2.0协议(可能会使用nghttp2,避免重复造轮)
可靠、友好的RNG API
新的Getter/Setter
C++用法
新的加密扩展
捆绑PECL的http库
13.函数可以在声明之前调用也可以在声明之后调用且不分大小写
14.要想使用全局变量需用global定义该变量且在执行语句之前
fun_num_args() //获取参数个数
func_get_arg()//获取指定位置的参数的值
fun_get_args() //获取参数数组(数组为索引数组)
*想要使用字符串函数最好把字符串全部变成小写的在进行处理
15.strtok()函数
<?php
$string = "Hello world. Beautiful day today.";
$token = strtok($string, " ");//首次调用时,传入需要分割的字符串
while ($token !== false)
{
echo "$token<br>";
$token = strtok(" ");//之后就不需要传入所要分割的字符串,因为它知道自己的位置(指针)
}
?>
16.str_replace(find,replace,search)
在search中查找find并把search中的find替换为replace
17.正则表达式
.表示匹配除(\n)外的任意一个字符{当在一个字符类的开始或末尾使用.时,它失去了匹配意义仅仅表示符号.}
*表示一个模式出现0次或多次 (放在后面)
+表示一个模式出现至少一次(放在后面)
?表示一个子模式为可选
net|com其中|表示一个选择,匹配net或者com
()括弧里的子模式被精确匹配
{2,}某一个模式重复至少两次
[^a-z]匹配除了a~z的任意一个字符
^[a-z]$匹配只含有小写字母的字符串的一个字符
PHP正则表达式必须包含在单引号中,如果在双引号引用中使用\需要用4个\,使用$需要用\\\$
匹配标点符号时应在其前加\用来转义
18.分割字符类型一定的字符串用explode,如果分割字符类型不定的字符串用split //尽量用explode因为效率高于split
//对于单个可以正则表达式的却选择多个字符串函数是不明智的
19.被include或require引用的文件命名为.inc.php
如果希望文件是纯HTML或者文本并不执行PHP代码可以使用readfile()函数
20.面向对象:
a. private定义的属性和方法不能被子类继承,protected则可以被继承但是只能在子类内部使用,public被继承后可以在类外使用。子类继承父类后,若对父类的function函数进行了重载覆盖,可使用parent::function()仍可输出父类函数的值。
b. 类中操作某个属性可以使用$this指针:如$this->attribute;
c.可以使用__set()和__get()两个函数来检查和设置任何属性的值。
d.final关键字可以用来禁止方法和类被继承
e.PHP只允许一个子类继承(extends)一个父类,不允许一个子类继承多个父类(即多重继承),但允许一个父类可以多个子类,但是可以使用接口(implements)来解决这个问题。一个子类只能继承一个父类,但是可以实现多个接口且必须实现接口中指定的方法,否则将出现致命错误。
21.类中:变量命名全部小写,函数命名使用驼峰首字母大写
22.const定义常量和static定义静态方法都可以在不初始化对象的情况下就能进行使用(注意,不能再静态方法中使用$this因为该方法可能没有引用的对象的实例)
A.类中定义常量:const PI=3.14; 访问常量:类名::PI
B.定义:static function C($input){
return input*input;
}
访问静态方法:echo 类名::C(8);
23.instanceof可用于检查一个类的类型,是否被继承是否实现了接口
24.类中定义的函数参数类型如果被指定为B类实例变量,那么参数传值时如果传入了A类实例,将发生错误,但是如果参数类型被指定为A类实例变量且B类继承了A类,那么参数传值如果传了B类实例,则不会发生错误,因为B类继承了A类。
25.若想使用__call($function,$arr)重载方法,则function方法不必实现也可。
26.__toString()可用来打印方法返回值
Reflection()也可用来打印出类的详细信息(间接调用__toString)
$class=new ReflectionClass(“class”);
echo ‘<pre>’.$class.‘</pre>’;
27.一个典型的web服务器运行流程
28.MySQL数据库权限授予:(操作之间用逗号隔开)
A. grant all on * to 用户名 identified by ‘密码’ with grant option; //授予该用户操作所有数据库的权限
B. revoke all privileges ,grant from 用户名; //撤销该用户的所有权限
C. grant 操作 on 数据库 .* to 用户@localhost identified by ‘密码’;//授权一个用户账号、密码以及对本地数据库的操作(操作为usage时该用户没有任何权限)
D. revoke 操作 on 数据库 .* from 用户名; //撤销该用户对某一数据库的一些操作
28.MySQL默认存储引擎MyISAM, 列类型大二进制blob可用于存储图像或声音数据。
SQL语句中使用like进行匹配,%表示任意个字符,_表示一个字符
29.MySQL数据库的DML操作:
A.insert into table_name(column1,column2 )values (value1,value2);
//有括号时可以选择特定几列进行插入,没有括号时默认全部插入
或 insert into table_name set column1=value1,column2=value2;
B.select table1.column1,table1.column2 from table1 ,table2 where table1.column3=table2.column1;//两个表之间有关联时
C.select table1.column1,table1.column2 ,table1.column3 from table1 left join table2 on table1.column3=table2.column3;
//左关联在两个表拥有共同column3的条件(on字句中)下,如果column2没有匹配行则column2=NULL
select table1.column1,table1.column2 from table1 left join table2 using(column3) where table1.column2 is null;
//左关联在两个表拥有共同column3下,如果table1.column3为null则打印出来
D.select c.column1 from table1 as c , table2 as b where c.column2=b.column2;//利用别名进行查询
select c1.name, c2.name, c1.city from table as c , table as b where c1.city=c2.city and c1.name!= c1.name;
//利用别名对同一个表中的多行进行查询
select name, city from table order by name asc; //第一个表进行升序查询(降序用desc)
E.select id, avg(amount) from table group by id having avg(amount) > 50;
//从table中查询每个id的大于50的平均值(如果仅仅使用avg()则查询的是所有列的平均值)
select name from table limit 2,3; //返回查询结果的第2条到第三条
30.update table set column=value;//更新表中一列的值
31.alter table c1 modify name char (70) not null;
用trim函数去除左右两边的特殊字符,再用get_magic_quotes_gpc()函数来检查是否自动加了引号,如果没有用addslashes()来进行过滤
mysql_real_escape_string($string); //如果要将该字符串存入数据库,需要进行处理转义(预防数据库攻击)
32.PHP代码连接MySQL数据库
@ $db=new mysqli_connect(“主机名”,”用户名”,“登录密码”,“数据库名”);
If(mysqli_connect_errno()){
echo “错误提示”;
exit;}
A:
执行查询操作:
获取数据行数:
取出数据库元素方法:
1.
2.
3.
B:执行插入语句:
当使用insert,update和delete操作时,需用affected_rows函数用于获取插入行数
C:使用prepare语句可以防止sql语句注入和提高执行速度
sssd的意思是后面四个变量对应的分别是字符串,字符串,字符串,双精度。
D:PEAR MBD2 抽象层(后期学习)
安全性与电子商务
33. 时间问题
a.获取当前时间
date_default_timezone_set(‘PRC’);
echo date(‘Y-m-d H:i:s’);
b.获取前一天此时时间
date_default_timezone_set(‘PRC’);
echo date(‘Y-m-d H:i:s’,strtotime(‘-1 day’));
34. 计算岁数:
$day=25; $month=5; $year=1992;
$bdaytime=mktime(0,0,0,$month,$day,$year);
$nowtime=time();
$ageunix=$nowtime-$bdaytime;
$age=floor($ageunix/(360*24*60*60));
echo $age;
35.图形图像
A.创建图像
$image =imagecreatetruecolor($width,$height); //创建一个空白的背景图像(图像标识符)
$blue=imagecolorallocate($image,0,0,64); //为图像分配颜色
imagefill($image,0,0,$blue); //图像添加背景颜色(2,3参数是起始坐标)
imagestring($image,4,50,150,’text’,$blue);//为图像添加字符串(2文本字体大小,3,4文本起始位置)
B.输出图像
Header(‘Content-type:image/png’); //告诉浏览器发送的是图像
//Header()函数的另一个作用是http重定向,告诉浏览器加载一个不同的页面而不是被请求的那个(如果在调用该函数前,http已经发送那么这个函数将不会执行)
imagepng($image); //调用该函数输出png图像
C.清理
Imagedestroy($image);
36.会话
A.开始一个会话
session_start(); //在脚本执行的最开始处添加,开始一个会话
B.注册一个会话
$_ESSION[‘var’]=5; //
C.使用一个会话
session_start(); //开始一个会话
$_SESSION[‘var’] //获取会话变量
//在使用对象作为会话变量时,必须在session_start()语句前,先实现对对象类的定义
if(isset($_SESSION[‘var’])){} //用来判断一个会话变量是否存在
D.注销一个会话
unset($_SESSION[‘var’]); //注销一个会话变量
session_destroy(); //注销一个会话
37.其他特性
A.eval($string); //把字符串当做PHP代码执行
B.mysql_query($query) or die( $string||$function); //连接数据库失败,给出字符串提示或者调用一个函数(die与exit一样)
C.$serail=serialize($object||$array); //该函数可以将一个对象或数组进行序列化为字符串(如果序列化对象,应该在使用该语句前对列进行实例化)
$new=unserialize($object||$array); //反序列化函数
D.获取PHP拓展部件以及每个部件中的拓展函数
E.识别当前脚本运行所有者
echo get_current_user();
G. 获取脚本最近修改时间
date_default_timezone_set(‘PRC’);
echo date(‘y-m-d H:i:s’,getlastmod());
H. ini_set(‘instruct’,’value’) //临时修改php_ini中的值
ini_get(‘instruct’); //获取php_ini中的值
I.show_source(‘var.php’); //对PHP代码进行高亮显示