首页 > PHP技术 > php中级 > 中级 PHP 知识点汇总
2016
07-20

中级 PHP 知识点汇总

——————————————————————————
2.jQuery
  包括javascript框架和prototype.js框架
选择器:
  1.基本选择器:
    ①、$('#result')=jQuery('#result')=document.getElementById('result')
                           <div id='result'>
			   <div class='result'>
   ②、class选择器 $('.result')
   ③、元素选择器$('div')
  2.子代选择器:$('#myform < input')
  3.后代选择器:$('#myform  input')
  4.组合选择器:$('#myform < span < input')
3.Ajax
 ajax的用处是用来异步js和xml 不仅可以获取xml数据,还可获得hmtl和json数据
   ajax的优点:1.提升用户的体验2.占用带宽小3.减小服务器的负载
   ajax就是把B页面的内容,显示到A页面的指定位置,实现异步传输
   $.ajax() 返回其创建的 XMLHttpRequest 对象。
   $.ajax({
    url:,  data:,  type:,  datatype:,  success:function(这个参数里,存在被传回的页面的所有内容){}   });
  $.post('请求地址','传递参数','回调函数');
  $.get('请求地址','传递参数','回调函数');
post传值文件没有大小限制,保密性好,必须有form表单
get传值安全性不高,有大小限制
当地址栏里有中文时,用urlencode(编码 URL 字符串)
urlencode — 编码 URL 字符串
urldecode(解码已编码的 URL 字符串)

4.会话控制

      session:unset()和array() 是连同内存和session文件内容一起删除,而session_destroy只是将文件删除
   cookie没有生命周期的叫会话cookie,随着浏览器的关闭,cookie消失
   cookie有两种存在方式,一种是以文件形式存在,另一种是保存在内存里
   cookie里面只能存字符串
  会话控制主要是为了跨页面传值
序列化是把其他的类型转换成字符串类型
5.smarty
代码重用(include,require,include_once,require_once)
include require 比 require_once include_once 性能高
 加载类文件用 require_once(最好) include_once

6.PDO
   dsn(data source name)
   //数据源
   $dsn = 'mysql:host=127.0.0.1;dbname=java1008a';
die('到此结束'); 等同于 echo '到此结束';die;

----------------------------------------------------------------------------------

2.b/s与c/s简单比较,区别:
--a、运行环境不同(广域网、局域网)
--b、安全级别不同(低/高)
--c、用户群不同(全部用户/局部用户)
--d、系统升级不同(无缝升级/整体升级)
--e、用户开启不同(浏览器/特制软件)
--f、软件界面特点不同(信息流/用户体验)
  比如:b/s就是网上的微博、博客;c/s就是在网吧打的网络游戏(奇迹、传奇等)
3.php是什么:运行在服务器端的脚本语言
--Hypertext Preprocessor
--personal home page
4.php语言能做什么
--图形化用户界面程序
--服务器端运行脚本程序

3.php外部变量$_POST[]、$_GET[];

  特殊运算符
  '.'是连接符
  ".="是连接赋值
  "@"屏蔽错误信息  [email protected]_connect(主机,用户名,密码)
5.流程控制(顺序、选择、循环)
******************************************************************************
******************************************************************************
第三单元【字符串】
1.字符串的三种定义方式(单引号、双引号、定界符)
---单引号定义(转义\'和\\)
---双引号定义(转义\n \r \t \$ \\ \")
---定界符方法<<<eof

2.函数部分
explode/implode
substr()**
str_replace/trim/ltrim/rtrim

strstr(str, search)获得指定字符串最开始出现到最后的内容
strrchr(str, search)获得指定字符串最后出现到最后的内容
strpos(str,  search)获得指定字符串最开始出现的位置
strrpos(str, search)获得指定字符串最后出现的位置
ucfirst(str)将字符串第一个字母大写
ucwords(str)将字符串的每个单词的第一个字母大写
strlen(str)获得字符串长度
strcmp(str1, str2)比较两个字符串大小,
		  返回负数表示 str1 小于 str2;
		  返回正数表示 str1 大于 str2;
		  返回零表示二字符串相同

urlencode(str)替换所有非字母数字的字符,变为%后面跟两位16进制数,空格变为+号
urldecode(str)对已%##编码的URL进行解析还原
parse_url(str)解析完整的url转变为为数组
parse_str(str,out)解析请求字符串转变为数组
htmlspecialchars()转换html代码为实体代码
printf/sprintf %b %d %c %x %s %f %X
–	b 		整数转成二进位。 
–	c 		整数转成对应的 ASCII 字符。 
–	d 		整数转成十进位。 
–	f 		单倍精确度数字转成浮点数。 
–	o 		整数转成八进位。 
–	s 		转成字符串。 
–	x 		整数转成小写十六进位。 
–	X 		整数转成大写十六进位。

1.数组和栈的操作
  array_push(目标数组,字符串)将字符串压入数组的最后
  array_pop(目标数组)将数组最后的元素弹出并返回
2.数组和队列的操作
  array_unshift(目标数组,字符串)将字符串放到数组的开始位置
  array_shift(目标数组)删除数组的第一个元素并返回
3.数组和指针的操作key() current() next() prev() reset() end()
4.预定义数组($_GET $_POST $_FILES $_COOKIE $_SESSION)
******************************************************************************
******************************************************************************
第六单元【其他常用函数】
date(format,[timestamp])//格式化时间信息,并返回
time()//返回当前时间戳信息

mktime(hour,minute,second,month,day,year)
mktime(小时,分钟,秒,月,天,年)//取得一个日期的 Unix 时间戳

max()//取得最大值
-echo max(1, 3, 5, 6, 7);  // 7
-echo max(array(2, 4, 5)); // 5
-echo max(0, '1hello');     // 1hello
-echo max('hello', 0);     // hello
-echo max(-1, 'hello');    // hello
-echo max(array(2, 4, 8), array(2, 5, 7)); // array(2, 5, 7)
-echo max('string', array(2, 5, 7), 42);   // array(2, 5, 7)数组和非数组比较数组总认为最大

mt_rand(65,94)//获得随机数
round()//四舍五入取整
flush()//输出准备区内容
urlencode('张三')//返回字符串中,除了-_.之外的所有非字母数字部分为%后接两位
16进制数,空格转化为+
urldecode()//对已经编码的部分反编码
var_dump()//输出变量的详细信息(八种数据类型数据都可以输出)

chr(mt_rand(65,94))随机获得字母
ord(chr(mt_rand(65,94)))将字母转化为数字
basename(路径名)获得路径中文件名部分
strtolower转换小写

第七单元【php连接mysql】
*mysql_connect(主机,用户名,密码) 打开一个到 MySQL 服务器的连接
*mysql_select_db(数据库,连接数据库资源) 选择 MySQL 数据库
*mysql_query("set names utf8");设定字符集          
*mysql_close() 关闭 MySQL 链接
*mysql_query(语句) 发送并执行一条sql语句
mysql_fetch_row(结果资源)从结果集中取得一行结果(索引数组)
mysql_fetch_assoc(结果资源)从结果集中取得一行结果(关联数组)
*mysql_fetch_array(结果资源)从结果集中取得一行结果(索引/关联数组)
mysql_fetch_object(结果资源)从结果集中取得一行结果(对象数组)

mysql_errno()返回错误号码
*mysql_error()返回错误信息
*mysql_num_rows(结果资源)用于计算查询结果中所得行的数目
*mysql_affected_rows()获得受影响的结果数目
*mysql_insert_id()传回最后一次使用 INSERT 指令产生的自动增长 ID 值

mysql_result(结果集,索引行,字段)指定获取结果
mysql_free_result(结果资源)释放结果集
mysql_num_fields(结果资源)用于计算查询结果中所得列的数目
mysql_fetch_field(结果资源)从结果集中取得列的结果,以对象形式返回
mysql_pconnect()永久连接数据库

1.留言板建立数据库bbs,建立两张表leave_word和back_word(留言表和回复表)
  leave_word:
  字段       数据类型
  id        int         主键、自增
  title     varchar(20) 标题
  content   text        内容
  itime     datetime    添加时间
  
  back_word:
  id        int         主键、自增
  leave_id  int         外键(留言id)
  content   text        内容
  btime     datetime    回复时间
4.删除留言,对无效、无用的留言实现删除功能(这时需要用get方式传递被删除留言id值)
5.修改留言,对需要修改(get方式传递被删除留言id值,再利用隐藏域方式传递给接收页面)
6.留言详细显示功能,有的留言内容比较多,在明细页面不可能全部显示出来(这时利用get方式传递留言id)
7.在详细页面可以实现回复功能和回复留言展示,步骤:制作一个回复表单和接收数据页面

     3.构造方法和析构方法
       构造函数:实例化对象首先第一个需要做的事情就是构造函数。一个小孩出生到5岁之前,所有的事情都是父母帮助做的,包括起名字、穿衣服、吃饭等等。
       析构函数:一个对象被使用完后需要做一些善后工作,这些善后工作是不需要人为干预的,例如资源释放、变量删除等。例如:一个小狗死后,主人非常爱惜它,就把它埋在了家后园的一颗树下。小狗被埋这件事情是主人做的,不是狗做的。这就是析构函数。

     3.类的重写
       子类和父类之间的事情,就是说父类有的方法,子类不但可以直接使用,还可以在子类中
       重新定义具体内容,例如有一个父亲会驾驶汽车,那么他的儿子也会驾驶汽车,但他的儿子
       可以不驾驶汽车,而驾驶飞机,这就是类方法的重写。
     
D    1.final(最后的)关键字使用
       该关键字修饰的类不能被继承
       该关键字修饰的方法不能被重写
     2.static(静态)关键字使用(类的内部、外部、子类)
       实例化对象在内存中的分配有讲到大的数据在内存被分配到堆空间里边。现在有一个例子:有一个
       "学生"这个类,里边有一个成员属性是"国家",标识该对象是属于哪个国家的,比如美国、英国、德国等 ,这个类在实例化对象时候,每个对象在内存中都会分配一个空间用于存放国家这个成员属性,如果
     有100个对象,那么在内容中会分配100个相应的空间。如果这个类的使用对象是在"中国"境内,那么
     每个对象的国家属性就会是一样的,即"中国",相应的在内存中会有100个空间存放100个相同的内容
     这会造成空间浪费,其实到这里我们可以知道100个相同的内容用一个空间存放就可以,反正都是一样的,
       这就产生了静态化概念"static"。
       用static修饰的成员属性,该属性就不是对象的,而是类的。
     3.self和parent关键字使用
       在类的内部访问类中的成员(属性和方法),可以用"$this",该关键字泛指对象,这是访问一般的类
       成员,如果访问的成员是用static关键字修饰的,就不能用"$this"了,因为用static修饰的类
       成员是被类本身拥有,不属于任何对象了,这时候需要用"self"关键字修饰 self::成员
       在类的外部访问类本身拥有的成员可以这样  类名::成员属性。
       在子类中访问父类拥有的成员可以用parent关键字  parent::成员属性
     4.const(常量)关键字使用
       在php中可以定义常量,类外部用define定义,类内部用const定义。
       常量的拥有者是类本身,类内部访问常量用 self::常量
                      类外部访问常量用 类名::常量
		      子类访问常量    parent::常量
     6.魔术方法clone、__call、__autoload使用
     clone:在一个项目里边我们有时候需要两个或多个完全一样的初始化对象,这时候可以使用clone技术
     不用clone技术也可以,不过每个新的对象都需要初始化属性值,这样比较繁琐,也容易出错,
使用clone就比较简单,克隆出来的多个对象彼此是独立的,互不相干。
           $p2 = clone $p1;
   __call:在类的使用过程中,如果一个对象调用的方法不在类里边,那么这时候程序要报错,然后程序退
          出不能继续运行。这样做用户体验非常不好,如果有一种方法可以使得程序报错完后可以继续运
行,这样的程序给人更智能、用户体验更好的感觉,这时候就可以用__call
	      public function __call($method_name,$args){
		echo "你访问的方法:";
		echo $method_name;
		echo "参数:";
		print_r($args);
		echo "不存在";
	      }
       __autoload:开发一个软件系统,往往里边会有很多类,在初始化类对象之前需要先include这个对
                象对应的类文件。所有的类不能都放到一个文件(文件臃肿,不易维护),这样就会在程
		序开始处有很多的include列表,这样做非常繁琐,出现一个新的类就需要被include,
		有没有一种方法可以使得被include的类文件在实例化对象时候才引入,否则不动作,
		答案是有的,这时候可以用魔术方法__autoload
		  function __autoload($className){
			include($className.'.php');
		  }
     8.子类继承父类时候成员修饰符限制,子类的修饰级别大于父类。例如父类的修饰符是protected,
       则子类修饰级别是protected或public。父类是public的,子类也必须是public的

    1.抽象类
       在类里边定义的没有方法体的方法就是抽象方法,有抽象方法的类被称为抽象类。抽象类不能实例化对象。
       所谓没有方法体就是方法在声明时候没有花括号和里边的内容。
       作用之处:
         例如:我有一个类"动物",里边有方法"吃食"(还可以有许多其他的方法)
	 动物这个类可以有许多子类例如:狗、鱼、鸟等,这些子类有一个共性就是都有吃食这个方法
	 一般的解决方法是:定义3个类,里边都有吃食方法。这样实现没有问题的,但是如果其中一个
	 类没有吃食方法,这时候程序是不给报错的。我们现在要做的就是3个类中任何一个没有吃食方法
	   系统就要报错。这时候就需要用到抽象类了。
       抽象类按照字面意思理解就是对3个类的进一步抽象。抽象出来吃食方法。
       抽象类技术特性:
       a、抽象类不能实例化
       b、类的成员方法是抽象的,则这个类也是抽象的
       c、抽象方法体内没有实现细节,具体实现留给子类实现
       d、继承抽象类的子类必须实现父类的抽象类,除非自己也是抽象类。
       
     2.接口(插座实例)
       当一个抽象类里边的全部方法都是抽象方法时候,这个抽象类就是"接口"。
       接口技术特性:
       a、interface声明
       b、全部接口方法是public的,因此可以省略
       c、接口只定义方法,没有具体方法实现
       d、实现类用implements实现接口,全部接口方法都要实现
       e、接口可以多实现,中间用逗号分开
       f、接口是对抽象类的抽象,抽象类是对类的抽象,类是对事物的抽象。
       g、接口不能实例化
       (1)、抽象类和接口有什么不同
        抽象类只能单继承,接口可以多实现
        抽象类里面可以有抽象方法和普通方法,而接口里只有抽象方法
        抽象类里面可以有自己的属性,而接口里面只能有常量
        接口里面的方法必须是public的,而抽象类不同
       (2)、抽象类和接口的相似之处
        抽象类里面的抽象方法在继承的时候必须都要重写,接口里面的方法也必须都要实现。
        抽象类和接口都不能直接实例化,
	抽象类需要继承(extends),接口需要实现(implements)。
        抽象类和接口都体现了多态的特性。

3.jquery
	jquery是js的封装包,里边有很多集成的函数可以让我们使用,jquery的宗旨就是写更少的代码实现更多的功能
	使用的方法:
	1.引进jquery包
		<script type="text/javascript" src='jquery-1.4.2.js'><script>
	2.测试jquery是否加载成功
		$(function(){
			alert("jquey加载成功");
		})
	3.获取页面的元素
		$('#div');通过id获取页面元素	
		$('.div');通过class获取页面元素
	jquery中的事件
	1.$('#mydiv').click(function(){});鼠标点击事件【要写在onload事件里边】
	2.$('#mydiv').hover(function(){},function(){});鼠标移动到对象事件
	3.$('#mydiv').attr();获得对象属性信息
	4.$('#mydiv').attr('checked');查看单复选框的选定情况!
	5.$('#mydiv').css();获得对象的属性信息
	6.$('#mydiv').css(样式,值);给对象赋予样式
	7.$('#mydiv').addClass('trb');给元素class属性赋值trb;
	8.$('#mydiv').removeClass('trb');使元素失去class属性;
	9.$('#mydiv').submit(function(){});提交事件;
	10.$('#mydiv').keyup(function(){});键盘敲击事件;	
	在项目中的使用:表单的验证

20.	* 什么是单一入口(单点入口)呢?
        所谓单一入口就是整个应用程序只有一个入口,所有的实现都通过这个入口来转发,
        比如说在上面我们就使用index.php作为程序的单点入口,
	当然这个入口文件的名字是可以由自己任意定义的。
	单点入口有几大好处:
	    第一、一些系统全局变量,都可以在这里定义。
	    比如说你要对数据进行初步的过滤,你要模拟session处理,
	    你要定义一些全局变量,甚至你要注册一些对象或者变量到注册器里面
	    第二、程序的架构更加清晰明了。

编程技巧

扫一扫 关注敲代码 聊聊编程技术 聊聊程序人生。

查 看学习编程5个常见的疑问