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代码进行高亮显示
posted @ 2016-03-11 23:14  Shaunlan  阅读(173)  评论(0编辑  收藏  举报