• 1. (第3讲) PHP面向对象开发的学习(一)1、什么是面向对象,什么是类 2、使用CLASS创建一个类 3、类的成员属性和成员方法 4、使用new函数对象实例化本讲知识点
  • 2. (第3讲) PHP面向对象开发的学习(一)1、什么是面向对象起初,“面向对象”是专指在程序设计中采用封装、继承、抽象等设计方法。可是, 这个定义显然不能再适合现在情况。面向对象的思想已经涉及到软件开发的各个方 面。如,面向对象的分析(OOA,Object Oriented Analysis),面向对象的设计 (OOD,Object Oriented Design)、以及我们经常说的面向对象的编程实现 (OOP,Object Oriented Program)。传统开发方法存在问题1.软件重用性差 ,2.软件可维护性差,3.无很好的扩展性面向对象的要素1. 抽象性 , 2. 封装性 ,3.共享性 ,4. 强调对象结构而不是程序结构面向对象的三大特点(封装,继承,多态)缺一不可
  • 3. (第3讲) PHP面向对象开发的学习(一)PC对象属性:电脑方法:我们理解成提高的功能, 看电影,玩游戏,编程,上网什么是类我们可以理解成一个功能集合菜单,我们通过类来实现生成我们的方法类: 显示器 键盘 主机 ……
  • 4. (第3讲) PHP面向对象开发的学习(一)2、使用CLASS创建一个类class 类名 { …… }成员属性 成员方法class MyPc{ public $name; var $price; function vod() { return “我是智能机器人"; } }3、类的成员属性和成员方法
  • 5. (第3讲) PHP面向对象开发的学习(一)4、使用new函数对象实例化class MyPc{ public $name; var $price; function vod() { return "我是智能机器人"; } } $pc1 = new MyPc(); $pc1->name;new 对象名( 参数 )例:使用 -> 访问对象内容
  • 6. (第3讲) PHP面向对象开发的学习(二)1、创建一个和多个对象 2、对象中的$this关键字 3、初始化对象 __construct() 4、析构函数 __destruct()本讲知识点
  • 7. (第3讲) PHP面向对象开发的学习(二)1、创建一个和多个对象创建一个和多个对象我们只需要多次使用 new 函数 ,进行对类的实例化class MyPc{ public $name; public $price; function vod() { return “我会做很多事情"; } …… }为了让大家养成良好的习惯和今后对PHP6的适应,建议使用 public 而不是 var$pc1 = new MyPc(); $pc2 = new MyPc(); $pc3 = new MyPc();类对象
  • 8. (第3讲) PHP面向对象开发的学习(二)2、对象中的$this关键字$this关键字是用来访问当前对象中的对象属性和对象方法的系统变量class MyPc{ public $name; public $price; function vod() { $this->name; } …… $this->vod() ; …… }我们可以理解为$this是在对象中 特殊的一种使用构造函数和变量的方法$this仅能在当前对象中使用
  • 9. (第3讲) PHP面向对象开发的学习(二)3、初始化对象 __construct()我们在创建一个类有时候需要初始化一些操作,这个时候我们需要使用初 始化函数,在PHP5中有两种初始化方法:1、原PHP4中我们需要建立一个 与类名称相同的一个对象方法:class MyPc{ function MyPC ( ) { 初始化操作 } }2、在PHP5中继承了PHP4但为了更 好的针对面向对象开发有了固定函数:class MyPc{ function __construct() { 初始化操作 } }相等
  • 10. (第3讲) PHP面向对象开发的学习(二)4、析构函数 __destruct()能够在对象释放时自动被调用的方法被称为析构函数PHP4支持析构函数,通过登录在PHP运行终止时用 register_shutdown_function()调用的函数,只有类似的实行方法。 PHP5正式支持析构函数,能够在类中指定对象释放时的动作。 我们可以理解为垃圾回收机制当对象内部的操作执行完毕的时候, __destruct()被调用, 然后对象所使用的内存被释放出来。 class MyPc { …… function __destruct() { …… } }规则:后进先出
  • 11. (第3讲) PHP面向对象开发的学习(三)封装 关 键字 :public,protected,private 封装相关函数:__set() , __get()类的封装和应用
  • 12. (第3讲) PHP面向对象开发的学习(三)封装关键字PublicProtectedPrivate全局√XX继承类√√X本类√√√public 表示全局,类内部外部子类都可以访问; protected表示受保护的,只有本类或子类或父类中可以访问; private表示私有的,只有本类内部可以使用;封装是把一些相关的属性和行为隐藏起来,从而得到保护和安全
  • 13. (第3讲) PHP面向对象开发的学习(三)class MyPc{ public $name; protected $price; private function vod() { $this->name; } …… }全局属性 任何位置都可以引用保护属性 只有本类或子类或父类中可以访问私有属性 只有本类内部可以使用;
  • 14. (第3讲) PHP面向对象开发的学习(三)封装相关函数:__set() , __get()某些特定操作的时候需要访问和赋值封装的类型,这个时候我们就需要其他的 函数帮我们完成这些操作,PHP为我们提供了个方法名:__set() , __get()__set($Name,$Value)__set() 取得当前类中封装过私有属性或者方法重新执行或赋值操作__get()__get() 取得当前类中封装过属性或方法并转换成共有属性
  • 15. (第3讲) PHP面向对象开发的学习(四)1、继承关键字 :extends 2、PHP继承的规则 3、基类方法重载和父类方法访问类的继承和应用
  • 16. (第3讲) PHP面向对象开发的学习(四)1、继承关键字 :extendsPHP类的继承,我们可以理解成共享被继承类的内容。PHP中使用extends单一继 承的方法,请切忌!(非C++多继承)被继承的类我们叫做父类(基类)继承者成为 子类(派生类)CLASS1CLASS2CLASS3extendsextends依次被继承,class3拥有class1、class2所以功能和属性,避免方法和属性重名class MyPc{ …… ……class home extends MyPc{ …… ……extends2、PHP继承的规则
  • 17. (第3讲) PHP面向对象开发的学习(四)3、基类方法重载和父类方法访问基类派生类因为属于向下继承的原理,基类不能使用派生类里内容,这个时 基类的一些方法不能完成我们的一些派生类的功能,我们就可以 进行方法重载避免了,新建方法带来的混乱。 方法重载我们也可以理解方法覆盖,在派生类里使用与基类方法 重名的方法名称执行重载 重载时我们需要调用原始基类内容,再增加新内容,我们可以使用 基类名 :: 方法名称
  • 18. (第3讲) PHP面向对象开发的学习(五)1、抽象关键字 :abstract 2、抽象方法和抽象类的定义 3、抽象类和方法使用规则类的抽象方法和类
  • 19. (第3讲) PHP面向对象开发的学习(五)1、抽象关键字 :abstract抽象就是无法确切的说明,但又有一定的概念或者名称,在PHP中声明一个抽象 类或者方法我们需要使用adstract关键字2、抽象方法和抽象类的定义一个类中至少有一个方法是抽象的,我们称之为抽象类。 所以如果定义抽象类首先定义抽象方法。abstract class class1{ abstract function fun1(); …… }1、类中至少有一个抽象方法 2、抽象方法不允许有{ } 3、抽象方法前面必须要加abstract
  • 20. (第3讲) PHP面向对象开发的学习(五)3、抽象类和方法使用规则抽象类的几个特点: 1、不能被实例化,只能被继承 2、继承的派生类当中要把所以抽象方法重载才能实例化 abstract class cl1{ abstract function fun1(); …… }class cl2 extends cl1{ function fun1(){ } …… }继承重载所有抽象方法不可实例化可实例化
  • 21. (第3讲) PHP面向对象开发的学习(六)1、关键字 :final 2、关键字 : self 3、关键字 :static 4、关键字 :const类中常用关键字
  • 22. (第3讲) PHP面向对象开发的学习(六)1、关键字 :final 用来定义类和方法的一个重要关键字,当定义类的时候该类将不能被继承, 当用来定义方法的时候该方法将不能被重载final class class1{ …… final function fun1(){ …… } …… }该类将不能被继承该方法将不能被重载
  • 23. (第3讲) PHP面向对象开发的学习(六)2、关键字 : self 用来用类访问当前类中的内容的关键字,类似与$this关键字,但$this是需要 类实例化以后才可以使用,self 可以直接访问当前类中的内部成员self :: 类内部成员(属性或者方法)类名 :: 类内部成员(属性或者方法)等价于注意:因为没有实例化类访问内部属性或者方法是没有意义的, 所以self一般用来访问类中的:静态成员,常量,或者其他定义内容
  • 24. (第3讲) PHP面向对象开发的学习(六)3、关键字 :static 用来定义类的静态属性或方法,可以在类未被实例化时使用,静态属性单独占 用内存而不会因创建多个对象时而导致同样的方法或者属性重复占用。class class1{ static $name; static function fun1(){ …… } }类名称 :: 静态成员类名称 : : 静态成员 self : : 静态成员静态成员的访问静态方法内部禁止出现非静态内容类内部访问静态成员类外部访问静态成员
  • 25. (第3讲) PHP面向对象开发的学习(六)4、关键字 :const 用来定义类中的常量,类似PHP外部定义常量的关键字define(); Const只能 修饰类当中的成员属性!class class1{ const NAME; function fun1(){ …… } }注意事项:1、建议大写常量 2、常量不使用$符号
  • 26. (第3讲) PHP面向对象开发的学习(七)1、接口的介绍与创建 关键字 :interface 2、接口的引用与规范 关键字 :implements类中接口的应用
  • 27. (第3讲) PHP面向对象开发的学习(七)1、接口的介绍与创建接口:一种成员属性全部为抽象的特殊抽象类,在程序中同为规范的作用1、类中全部为抽象方法 2、抽象方法前不用加abstract 3、接口抽象方法属性为public 4、成员属性必须为常量1、类中至少有一个抽象方法 2、抽象方法前需加abstract抽象类接口区别共同点:1、本身都不能被实例化,必须被继承或者引用 2、继承或者引用后,需要把所有抽象方法重载方可使用
  • 28. (第3讲) PHP面向对象开发的学习(七)1、接口的介绍与创建接口有自己的创建关键字:interface 与普通类的创建类似interface demo { const NAME="名字"; function Fun1(); function Fun2(); }声明接口类对象属性必须为常量对象方法全部为抽象方法,前面无须加adstract
  • 29. (第3讲) PHP面向对象开发的学习(七)2、接口的引用与规范 接口引用区别与之前我们的学的类继承关键字 extends,继承只能是单一性,而 接口可以使用关键字:implements 多个引用并用逗号 , 分开.1、普通类引用接口例子: class mypc implements demo , demo2 , demo3{ …… }2、抽象类引用接口例子: abstract class mypc implements demo , demo2 , demo3{ …… }设已有接口 demo , demo2 , demo3
  • 30. (第3讲) PHP面向对象开发的学习(七)2、接口的引用与规范3、继承父类引用接口并存例子: class mypc extends root implements demo , demo2 , demo3{ …… }4、接口与接口继承: interface demo3 extends demo{ …… }设已有接口 demo , demo2 , demo3 父类 root先继承后接口,单继承多接口
  • 31. (第3讲) PHP面向对象开发的学习(八)1、多态的介绍与优势 2、运算符 :instanceof 3、多态的简单应用类中多态的应用
  • 32. (第3讲) PHP面向对象开发的学习(八)1、多态的介绍与优势 多态性是继抽象和继承后,面向对象语言的第三个特征。从字面上理解,多态的意思是“多种形态”,简单来说,多态是具有表现多种形态的能力的特征,在OO中是指“语言具有根据对象的类型以不同方式处理。 OOP的模式并不仅仅是把很多函数和功能集合起来,目的而是使用类,继承,多态的方式描述我们生活中的一种情况。从而使得我们的代码更具有“物”的意义。帮助我们减少一些重复性的代码和条件语句的判断。 介绍优势
  • 33. (第3讲) PHP面向对象开发的学习(八)2、运算符 :instanceofPHP 一个类型运算符。instanceof 用来测定一个给定的对象是否来自指定的对象类。class A { } class B { } $thing = new A; if ($thing instanceof A) { echo 'A'; } if ($thing instanceof B) { echo 'B'; }
  • 34. (第3讲) PHP面向对象开发的学习(八)3、多态的简单应用
  • 35. (第3讲) PHP面向对象开发的学习(九)1、对象描述的配置 2、对象方法的异常处理 3、克隆对象的应用 4、自动载入对象的方法总结篇
  • 36. (第3讲) PHP面向对象开发的学习(九)1、对象描述的配置 我们可以直接打印对象句柄,从而获得该方法的基本信息或其他内容。class My{ function __tostring ( ){ echo "我所要显示的内容"; } }方法名 __tostring()$p = new My(); echo $p;输出结果:我所要显示的内容
  • 37. (第3讲) PHP面向对象开发的学习(九)2、对象方法的异常处理 调用一些不存在的对象方法的异常处理,使程序继续正常运行。class My{ function __call($n,$v){ echo "错误的方法名".$n; echo "错误的参数".Print_r($v); } }方法名 __call($funname,$arr_value)因为参数会有多个所要 用数组的方式保存,打印 的时候也要就用print_r 输出
  • 38. (第3讲) PHP面向对象开发的学习(九)3、克隆对象的应用 通过克隆的方式我们可以在内存中生成两个一样的对象或升级原对象。class My{ function __clone( ){ echo "克隆时自动调用的函数"; } }方法名 __clone() 关键字 clone$a=new My() $b=$a; $a=new My() $b= clone $a; 内存中只有 一个对象内存中会有 两个对象
  • 39. (第3讲) PHP面向对象开发的学习(九)4、自动载入对象的方法 快速取得对象名称并自动载入进当前页面function __autoload($class_n){ include($class_n.".php"); } $p=new Mypc(); $d=new demo();方法名 __autoload()将会被自动调用,执行如下 include("mypc.php"); include("demo.php");该方法是在类以外单独的方法 也就是我们所谓的构造函数
  • 40. (第3讲) 制作自己的PHP+MYSQL的类学习目标1、巩固学习常用MYSQL函数 2、使用类封装常用SQL操作,简化代码 3、认识面向对象在开发中的重要作用
  • 41. (第3讲) 制作自己的PHP+MYSQL的类用到的知识:1、private 私有属性关键字 2、__construct 初始化方法名 3、常用mysql函数 4、常用SQL语句
  • 42. 学习重点1、PHP注入的基本原理 2、防止注入的几种办法 3、PHP其他地方安全设置(第3讲) PHP如何防止注入及开发安全
  • 43. (第3讲) PHP如何防止注入及开发安全1、PHP注入的基本原理 程序员的水平及经验也参差不齐,相当大一部分程序员在编写代码的时候,没有对 用户输入数据的合法性进行判断,使应用程序存在安全隐患。用户可以提交一段数据 库查询代码,根据程序返回的结果,获得某些他想得知的数据,这就是所谓的 SQL Injection,即SQL注入。 受影响的系统:对输入的参数不进行检查和过滤的系统 SQL注入过程 正常来讲,我们通过地址接收一些必要的参数如: list.php?id=2 页面中我们会使用 2 写入到SQL语句中 正常情况:Select * From Table where id=2 如果我们对SQL语句熟悉,就知道2 我们可以替换成我们需要的SQL语句 如:and exists (select id from admin)
  • 44. (第3讲) PHP如何防止注入及开发安全2、防止注入的几种办法其实原来就是我们需要过滤一些我们常见的关键字和符合如: Select,insert,update,delete,and,*,等等 function inject_check($sql_str) { return eregi('select|insert|update|delete|\'|\/\*|\*|\.\.\/|\.\/|union|into|load_file |outfile', $sql_str); // 进行过滤 }例子或者是通过系统函数间的过滤特殊符号 Addslashes(需要被过滤的内容)
  • 45. (第3讲) PHP如何防止注入及开发安全3、PHP其他地方安全设置1、register_globals = Off 设置为关闭状态 2、SQL语句书写时尽量不要省略小引号和单引号Select * From Table Where id=2 (不规范)Select * From ·Table· Where ·id·=’2’ (规范)3、正确的使用 $_POST $_GET $_SESSION 等接受参数,并加以过滤4、提高数据库命名技巧,对于一些重要的字段可根据程序特点命名5、对于常用方法加以封装,避免直接暴露SQL语句