1、PHPPHP面向对象的设计配套精品完整课件面向对象的设计配套精品完整课件3 3 PHP面向对象的程序设计 本章任务本章任务 v1. 面向对象的介绍 v2. 如何抽象一个类 v3. 通过类实例化对象 v4. 封装性 v5. 继承性 v6. 常见的关键字和魔术方法 v7. 抽象类与接口 v8. 多态性的应用 1.1.面向对象的介绍面向对象的介绍 v1.1 1.1 类和对象之间的关系类和对象之间的关系 v1.2 1.2 面向对象的程序设计面向对象的程序设计 v面向对象的概念(面向对象的概念(OOPOOP) OOP(Object-Oriented Programming, 面向对象的编程)技 术为编程
2、人员敞开了一扇大门,使其编程的代码更简洁、 更易于维护,并且具有更强的可重用性。 vOOPOOP达到了软件工程的三个目标:达到了软件工程的三个目标: 重用性、灵活性、扩展性 vOOPOOP面向对象编程的特点:面向对象编程的特点: 封装、继承、多态 v建议学习建议学习PHPPHP面向对象的两个方向:面向对象的两个方向: 面向对象技术的语法 面向对象的编程思想 1.1 1.1 类和对象之间的关系类和对象之间的关系 类与对象的关系就如模具和铸件的关系,类的实例化结 果就是对象,而对对象的抽象就是类.类描述了一组有相同特 性(属性)和相同行为(方法)的对象。 v什么是类:什么是类: 在面向对象的编程语
3、言中,类是一个独立的程序单位,是具 有相同属性和服务的一组对象集合。它为属于该类的所有对 象提供了统一抽象描述,其内部包括成员属性和服务的方法 两个主要部分。 v什么是对象:什么是对象: 在客观世界里,所有的事务都是由对象和对象之间的联系组 成的。对象是系统中用来描述客观事物的一个实体,他是构 成系统的一个基本单位。 1.2 1.2 面向对象程序设计面向对象程序设计 v对象的三个主要特性:对象的三个主要特性: 对象的行为:对象的行为:可以对对象施加哪些操作;如电视机的开、 关、转换频道等。 对象的状态:对象的状态:当施加那些方法时,对象如何响应;如电视 机的外形、尺寸、颜色等; 对象的标识:对
4、象的标识:如何区分具有相同行为与状态的不同对象。 2. 2. 如何抽象一个类如何抽象一个类 v2.1 2.1 类的声明类的声明 v2.2 2.2 成员属性成员属性 v2.3 2.3 成员方法成员方法 2.1 2.1 类的声明类的声明 v简单格式:简单格式: 修饰符修饰符 class class 类名类名 /使用class关键字加空格后加上类名 成员属性成员属性 /也叫成员变量 成员方法成员方法 /也叫成员函数 v完整格式:完整格式: 修饰符修饰符 class class 类名类名 extends extends 父类父类 implements implements 接口接口1,1, 接口接口2
5、.2. 成员属性成员属性 /也叫成员变量 成员方法成员方法 /也叫成员函数 2.2 2.2 成员属性成员属性 v格式: 修饰符修饰符 $ $变量名变量名=默认值默认值; ; /如:如:public $name=zhangsan;public $name=zhangsan; v注意:成员属性不可以是带运算符的表达式、变量、方法或函数调用。 v正确定义方式:可以不赋值,要使用关键字 v常用属性修饰符:常用属性修饰符:publicpublic、protectedprotected、privateprivate、staticstatic、varvar( (过时过时) ) public $var3 =
6、1+2; /错误格式 public $var4 = self:myStaticMethod(); /错误格式 public $var5 = $myVar; /错误格式 public $var6 = 100; /普通数值(4个标量:整数、浮点数、布尔、字串) public $var6 = myConstant; /常量 public $var7 = self:classConstant; /静态属性 public $var8 = array(true, false); /数组 2.3 2.3 成员方法成员方法 v成员方法格式:成员方法格式: 修饰符修饰符 function function 方法
7、名方法名( (参数参数.).) 方法体方法体 return return 返回值返回值 v修饰符:public、protected、private、static、abstract、final v声明的成员方法必须和对象相关,不能是一些没有意义的操作 /下面声明了几个人的成员方法,通常将成员方法声明在成员属性的下面 public function say() /人可以说话的方法 echo 人在说话; /方法体 public function run() /人可以走路的方法 echo 人在走路; /方法体 ?php /声明一个电话类,类名为Phone class Phone /声明4个与电话有关的
8、成员属性 public $Manufacturers; /第一个成员属性,用于存储电话的外观 public $color; /第二个成员属性,用来设置电话的外观颜色 public $Battery_capacity; /第三个成员属性,用来定义电话的电池容量 public $screen_size; /第四个成员属性,用来定义电话的屏幕尺寸 /第一个成员方法用来声明电话具有接打电话的功能 public function call() echo 正在打电话; /方法体,可以是打电话的具体内容 /第二个成员方法用来声明电话具有发信息的功能 public function message() ech
9、o 正在发信息; /方法体,可以是发送的具体信息 /第三个成员方法用来声明电话具有拍照的功能 public function photo() echo 正在拍照; /方法体,可以是拍照的整个过程 3. 3. 通过类实例化对象通过类实例化对象 v3.1 3.1 实例化对象实例化对象 v3.2 3.2 对象类型在内存中的分配对象类型在内存中的分配 v3.3 3.3 对象中成员的访问对象中成员的访问 v3.4 3.4 特殊的对象引用特殊的对象引用”$this$this” v3.5 3.5 构造方法与析构方法构造方法与析构方法 3.1 3.1 实例化对象实例化对象 v当定义好类后,我们使用newnew
10、关键字来生成一个对象。 $ $对象名称对象名称 = new = new 类名称类名称()(); $ $对象名称对象名称 = new = new 类名称类名称( ( 参数列表参数列表 ) ); 后面的()可以省略后面的()可以省略 由于对象资料封装的特性,对象属性(类中定义的变量) 是无法由主程序区块直接来访问的,必须通过对象来调用 类中所定义的属性和行为函数,间接地达成存取控制类中 资料的目的。 -”来访问对 象中的成员属性或成员方法。如: $ $引用名引用名 = new = new 类名类名( (构造参数构造参数) ); $ $引用名引用名-成员属性成员属性= =赋值;赋值; /对象属性赋值
11、对象属性赋值 echo $echo $引用名引用名-成员属性;成员属性; /输出对象的属性输出对象的属性 $ $引用名引用名-成员方法(参数);成员方法(参数);/调用对象的方法调用对象的方法 如果对象中的成员不是静态的,那么这是唯一的访问方式。 ?php /* 声明一个人类Person,其中包含三个成员属性和两个成员方法 */ class Person /下面是声明人的三个成员属性 public $name; /第一个成员属性$name定义人的名字 public $sex; /第二个成员属性$sex定义人的性别 public $age; /第三个成员属性$age定义人的年龄 /下面是声明人的
12、两个成员方法 public function say() echo 这个人在说话; /在说话的方法体中可以有更多内容 public function run() echo 这个人在走路; /在走路的方法体中可以有更多内容 /下面三行通过new关键字实例化person类的三个实例对象 $person1 = new Person(); /通过类Person创建第一个实例对象$person1 $person2 = new Person(); /通过类person创建第二个实例对象$person2 /下面三行是给$person1对象中属性初始化赋值 $person1-name = 张三; /将对象pe
13、rson1中的$name属性赋值为张三 $person1-sex = 男; /将对象person1中的$sex属性赋值为男 $person1-age = 20; /将对象person1中的$age属性赋值为20 /下面三行是给$person2对象中属性初始化赋值 $person2-name = 李四; /将对象person2中的$name属性赋值为李四 $person2-sex = 女; /将对象person2中的$sex属性赋值为女 $person2-age = 30; /将对象person2中的$age属性赋值为30 /下面三行是访问$person1对象中的成员属性 echo person
14、1对象的名字是:.$person1-name.; echo person1对象的性别是:.$person1-sex.; echo person1对象的年龄是:.$person1-age.; /下面两行访问$person1对象中的方法 $person1-say(); $person1-run(); /同上上面代码一样输出$person2对象的三个成员属性和两个方法 . . 3.4 3.4 特殊的对象引用特殊的对象引用”$this$this” 特殊对象的引用$this$this就是在对象内部的成员方法 中,代表本对象的一个引用,但只能在对象的成员方 法中使用,不管是在对象内部使用$this$thi
15、s访问自己对象 内部成员。还是在对象外部通过对象的引用名称访问 对象中的成员,都需要使用特殊的运算符“-”来完 成访问。 name., 性别:.$this-sex., 年龄:.$this-age.。; /在类中声明另一个方法 public function run() echo $this-name.在走路; /使用$this访问$name属性 public function demo() $this-say(); /在此方法中调用其它方法 3.5 3.5 构造方法与析构方法构造方法与析构方法 v构造函数构造函数: : 大多数类都有一种称为构造函数的特殊方法。当创建一个对 象时,它将自动调用构
16、造函数,通常用它执行一些有用的初始化 任务。 构造函数的声明与其它操作的声明一样,只是其名称必须是 两个下划线_construct( )。这是PHP5中的变化;PHP4的版本中, 构造函数的名称必须与类名相同。为了向下兼容,如果一个类中 没有名为_construct( )的方法,PHP将搜索一个与类名相同的 方法。 格式:格式: 修饰符修饰符 function _construct ( function _construct ( 参数参数 ) ) . . . . name = $name; /实例化时,会将参数$name为成员属性$this-name赋初值 $this-sex = $sex;
17、/在创建对象时,会将参数$sex为成员属性$this-sex赋初值 $this-age = $age; /在创建对象时,会将参数$age为成员属性$this-age赋初值 public function say() /下面是声明人的成员方法 echo 我的名字:.$this-name.,性别:.$this-sex.,年龄:.$this-age.。; /三次实例化person类的三个实例对象,并使用构造方法分别为新创建的对象成员属性赋予初值 $person1 = new Person(张三, 男, 20); /创建$person1会自动执行构造方法,将参数传给它 $person2 = new P
18、erson(李四, 女); /创建$person2会自动执行构造方法,传入前两个参数 $person3 = new Person(王五); /创建对象$person3时会自动执行构造方法,只传入一个参数 $person1-say(); $person2-say(); v析构函数:析构函数: 与构造函数相对的就是析构函数。析构函数是PHP5新添加的 内容,在PHP4中没有析构函数。析构函数析构函数是在对象被是在对象被销毁销毁之前自之前自 动调用的方法,主要执行一些特定的操作,例如关闭文件,释放动调用的方法,主要执行一些特定的操作,例如关闭文件,释放 结果集等结果集等。 与构造函数的名称类似,一个
19、类的析构函数名称必须是两个 下划线 _ _destruct( )。析构函数不能带有任何参数析构函数不能带有任何参数。 例如:例如: name.; name = $name; $this-sex = $sex; /声明的析构方法,在对象销毁前自动调用 public function _destruct() echo 再见.$this-name.; /下面三行通过new关键字实例化person类的三个实例对象 $person1 = new Person(张三, 男); /创建对象$person1 $person1 = null; /第一个对象将失去引用 $person2 = new Person(
20、李四, 女); /创建对象$person2 $person3 = new Person(王五, 男); /创建对象$person3 总总 结结 v本章必须掌握的知识点:本章必须掌握的知识点: 类和对象之间的关系类和对象之间的关系 类的声明及类中的成员组成类的声明及类中的成员组成 通过类实例化对象通过类实例化对象 对类中成员的访问对类中成员的访问 特殊的对象引用特殊的对象引用$this$this 构造方法的声明与作用构造方法的声明与作用 面向对象的封装、继承和多态三大特性面向对象的封装、继承和多态三大特性 谢谢 谢谢 PHP面向对象的程序设计 主讲:主讲: 电话:电话:400 700 13074
21、00 700 1307 网址:网址: EmailEmail: 本章任务本章任务 v1. 面向对象的介绍 v2. 如何抽象一个类 v3. 通过类实例化对象 v4. 封装性 v5. 继承性 v6. 常见的关键字和魔术方法 v7. 抽象类与接口 v8. 多态性的应用 4.4. 封装性封装性 v4.1 4.1 设置私用成员设置私用成员 v4.2 4.2 私有成员的访问私有成员的访问 v4.3 _set()4.3 _set()、_get()_get()、_isset()_isset()和和_unset()_unset() 四个方法四个方法 v封装封装性是面向对象编程中的三大特性之一,封装就是 把对象中的
22、成员属性和成员方法加上访问修饰符,使 其尽可能隐藏对象的内部细节隐藏对象的内部细节,以达到对成员的访问访问 控制控制(切记不是拒绝访问)。 v这是PHP5PHP5的新特性的新特性,但却是OOP语言的一个好的特性。 而且大多数OOP语言都已支持此特性。 vPHP5支持如下3种访问修饰符: public public (公有的 默认的) private private (私有的) protected protected (受保护的) 4.1 4.1 设置私用成员设置私用成员 v使用使用privateprivate关键字修饰就是实现了对成员的私有封装关键字修饰就是实现了对成员的私有封装 。封装后的成
23、员在对象的外部不能直接访问,只能在对 象的内部方法中使用 $this访问。 name = $name; $this-sex = $sex; private function leftLeg() /声明一个迈左腿的方法,被封装所以只能在内部使用 return 迈左腿; 4.2 4.2 私有成员的访问私有成员的访问 name=$name; /为对象的私有属性赋值 public function getName() /通过此方法获取属性name的值 return $this-name; /返回当前的私有名字属性 public function setSex($sex) /通过此方法设置属性sex的值
24、 if($sex=男 | $sex=女) /如果传入合法的值才为私有的属性赋值 $this-sex=$sex; /条件成立则将参数传入的值赋给私有属性 public function getSex() /通过此方法获取属性$sex的值 return $this-sex; /返回当前的私有性别属性 4.3 _set()4.3 _set()、_get()_get()、_isset()_isset()和和_unset()_unset() v魔术方法: _set()_set():用于替代通用的set赋值方法 _get(): _get(): 用于替代通用的get取值方法 _isset()_isset()
25、:检测对象中成员属性是否存在 _unset()_unset():销毁对象中成员属性方法 v注意: 上面四个魔术方法只对类中的私有、受保护成员属性有效。 魔术方法前的修饰符可以是公有、私有,不影响调用。 v_set( )方法:方法: 格式格式 修饰符修饰符 function _set(string $name,mixed $value) . 当我们直接为一个对象中非公有属性赋值时会自动调用此方法当我们直接为一个对象中非公有属性赋值时会自动调用此方法 ,并将属性名以第一个参数,并将属性名以第一个参数(string)(string),值作为第二参数,值作为第二参数(mixed)(mixed) 传进此
26、方法中。传进此方法中。 v_get( )方法:方法: 格式:格式: 修饰符修饰符 function _get(string $name) . 当我们直接输出一个对象中非公有属性时会自动调用此方法,当我们直接输出一个对象中非公有属性时会自动调用此方法, 并将属性名以第一个参数传进去。并将属性名以第一个参数传进去。 $propertyName = $propertyValue; /声明魔术取值方法;$propertyName :成员属性名 private function _get($propertyName) return $this-$propertyName; $person1 = new
27、Person( ); $person1-name = “李四”; /自动调用了_set()方法为私有属性name赋值 $person1-sex = “女”; /自动调用了_set()方法为私有属性sex赋值 echo $person1-name; /自动调用魔术方法_get( )获取属性name值 echo $person1-age ; /自动调用魔术方法_get( )获取属性sex值 v_isset( )方法:方法: 格式:格式: 修饰符修饰符 function _isset(string $name) . 当使用当使用isset()isset()或或empty()empty()判断一个对象
28、的私有或受保护的属判断一个对象的私有或受保护的属 性是否存在时,会自动调用此方法。参数性是否存在时,会自动调用此方法。参数namename表示被判断的表示被判断的 属性名。属性名。 v_unset( )方法:方法: 格式:格式: 修饰符修饰符 function _unset(string $name) . 当使用当使用unset( )unset( )销毁一个对象的私有或受保护的属性时,自销毁一个对象的私有或受保护的属性时,自 动调用此方法,并将属性名以第一个参数传进去。动调用此方法,并将属性名以第一个参数传进去。 name = $name; $this-sex = $sex; private
29、function _isset($propertyName) /需要一个参数,是测定的私有属性的名称 return isset($this-$propertyName); /其他的属性都可以被测定,并返回测定的结果 private function _unset($propertyName) /需要一个参数,是要删除的私有属性名称 if($propertyName = name) /如果参数中传入的属性名等于“name”时条件成立 return; /退出方法,不允许删除对象中的name属性 unset($this-$propertyName); /在对象的内部删除在对象外指定的私有属性 $pe
30、rson1 = new Person(张三, 男); /创建一个对象$person1,将成员属性分别赋上初值 var_dump( isset( $person1-name ) ); /输出bool(true),不允许测定name属性 var_dump( isset( $person1-sex ) ); /输出bool(true),存在sex私有属性 var_dump( isset( $person1-id ) ); /输出bool(false),测定对象中不存在id属性 unset( $person1-name ); /删除私有属性name,但在_unset()中不允许删除 unset( $p
31、erson1-sex ); /删除对象中的私有属性sex,删除成功 总总 结结 v本章必须掌握的知识点:本章必须掌握的知识点: 类的封装类的封装 封装后属性和方法的访问封装后属性和方法的访问 魔术方法:魔术方法:_set()_set()、_get()_get()、_isset()_isset()、 _unset()_unset()的使用的使用 谢谢 谢谢 PHP面向对象的程序设计 主讲:主讲: 电话:电话:400 700 1307400 700 1307 网址:网址: EmailEmail: 本章任务本章任务 v1. 面向对象的介绍 v2. 如何抽象一个类 v3. 通过类实例化对象 v4. 封
32、装性 v5. 继承性 v6. 常见的关键字和魔术方法 v7. 抽象类与接口 v8. 多态性的应用 5. 5. 继承性继承性 v5.1 5.1 类继承的应用类继承的应用 v5.2 5.2 访问类型控制访问类型控制 v5.3 5.3 子类中重载父类的方法子类中重载父类的方法 5.1 5.1 类继承的应用类继承的应用 v比如,当扩展一个类,子类就会继承父类的所有公有和保 护方法。但是子类的方法会覆盖父类的方法。 v继承对于功能的设计和抽象是非常有用的,而且对于类似 的对象增加新功能就无须重新再写这些公用的功能。 vphp继承的关键字:extendsextends 格式: 修饰符修饰符 class c
33、lass 子类名子类名 extends extends 父类名父类名 . . 类的继承类的继承 class Person public $name; public $age; function getInfo(). class Student public $name; public $age; public $school; function getInfo(). function study(). 使用继承后的效果: class Person public $name; public $age; function getInfo(). class Student extends Perso
34、n public $school; function study(). 通过继承可以简化类的定义。 类的继承类的继承 PHP只支持单继承,不允许多重继承。一个子类只能有一 个父类,不允许一个类直接继承多个类,但一个类可以被多 个类继承。 可以有多层继承,即一个类可以继承某一个类的子类, 如类B 继承了类A,类C又继承了类B,那么类C也间接继承了 类A, class A . class B extends A . class C extends B . 子类与父类的属性与方法子类与父类的属性与方法 子类继承父类的所有内容,但父类中的privateprivate部分 不能直接访问 子类中新增加的属
35、性和方法是对父类的扩展扩展 子类中定义的与父类同名的属性是对父类属性的覆盖覆盖, 同名的方法也是对父类方法的覆盖方法的覆盖 定义一个父类(基类)定义一个父类(基类) name = $name; $this-sex = $sex; $this-age = $age; function say() echo 我的名字:.$this-name.,性别:.$this-sex.,年龄:.$this-age.。; function run() echo $this-name.正在走路。; /声明一个学生类,使用extends关键字扩展(继承)Person类 class Student extends Pe
36、rson var $school; /在学生类中声明一个所在学校school的成员属性 function study() /在学生类中声明一个学生可以学习的方法 echo $this-name.正在.$this-school.学习; /再声明一个教师类,使用extends关键字扩展(继承)Student类 class Teacher extends Student var $wage; /在教师类中声明一个教师工资wage的成员属性 /在教师类中声明一个教师可以教学的方法 function teaching() echo $this-name.正在.$this-school.教学,每月工资为.
37、$this-wage.。; $teacher1 = new Teacher(张三, 男, 40); /使用继承过来的构造方法创建一个教师对象 $teacher1-school = edu; /将一个教师对象中的所在学校的成员属性school赋值 $teacher1-wage = 3000; /将一个教师对象中的成员属性工资赋值 $teacher1-say(); /调用教师对象中的说话方法 $teacher1-study(); /调用教师对象中的学习方法 $teacher1-teaching(); /调用教师对象中的教学方法 5.2 5.2 访问类型控制访问类型控制 v访问权限:访问权限: pr
38、ivateprivate protected protected public( public(默认的默认的) ) - - 在同一类中:在同一类中: 可以可以 可以可以 可以可以 类的子类中:类的子类中: X X 可以可以 可以可以 其他外部类中:其他外部类中: X X X X 可以可以 ?php /声明一个类作为父类使用,将它的成员都声明为私有的 class MyClass private $var1 = 100; /声明一个私有的成员属性并给初值为100 /声明一个成员方法使用private关键字设置为私有的 private function printHello() echo hello
39、; /在方法中只有一条输出语句作为测试使用 /声明一个MyClass类的子类试图访问父类中的私有成员 class MyClass2 extends MyClass /在类中声明一个公有方法,访问父类中的私有成员 function useProperty() echo 输出从父类继承过来的成员属性值.$this-var1.; /访问父类中的私有属性 $this-printHello(); /访问父类中的私有方法 $subObj = new MyClass2(); /初始化出子类对象 $subObj-useProperty(); /调用子类对象中的方法实现对父类私有成员的访问 ?php /声明一个
40、类作为父类使用,将它的成员都声明为保护的 class MyClass protected $var1=100; /声明一个保护的成员属性并给初值为100 protected function printHello() /声明一个成员方法使用protected关键字设置为保护的 echo hello; /在方法中只有一条输出语句作为测试使用 /声明一个MyClass类的子类试图访问父类中的保护成员 class MyClass2 extends MyClass /在类中声明一个公有方法,访问父类中的保护成员 function useProperty() echo 输出从父类继承过来的成员属性值.$
41、this-var1.; /访问父类中受保护的属性 $this-printHello(); /访问父类中受保护的方法 $subObj = new MyClass2(); /初始化出子类对象 $subObj-useProperty(); /调用子类对象中的方法实现对父类保护的成员访问 echo $subObj-var1; /试图访问类中受保护的成员,结果出错 5.3 5.3 子类中重载父类的方法子类中重载父类的方法 v在子类里面允许重写(覆盖)父类的方法 v在子类中,使用parentparent访问父类中的被覆盖的属性和 方法 parent:_construct();parent:_constru
42、ct(); parent:fun();parent:fun(); school = $school; /新添加一条为子类中新声明的成员属性赋初值 public function say( ) /方法重写(覆盖) parent:say(); /调用父类中被本方法覆盖掉的方法 echo 在.$this-school.学校上学; /在原有的功能基础上多加一点功能 $student = new Student(张三,男,20, edu); /创建学生对象,并多传一个学校名称参数 $student-say(); /调用学生类中覆盖父类的说话方法 6. 6. 常见的关键字和魔术方法常见的关键字和魔术方法
43、v6.1 final6.1 final关键字的应用关键字的应用 v6.2 static6.2 static关键字的使用关键字的使用 v6.3 6.3 单态设计模式单态设计模式 v6.4 const6.4 const关键字关键字 v6.5 instanceof6.5 instanceof关键字关键字 v6.6 6.6 克隆对象克隆对象 v6.7 6.7 类中通用的方法类中通用的方法_toString( )_toString( ) v6.8 _call( )6.8 _call( )方法的应用方法的应用 v6.9 6.9 自动加载类自动加载类 v6.10 6.10 对象串行化对象串行化 6.1 fi
44、nal6.1 final关键字的应用关键字的应用 v在PHP5中新增加了final关键字,它只能用来修饰类和方 法,不能使用final这个关键字来修饰成员属性,因为 final是常量的意思,我们在PHP里定义常量使用的是 define()函数和const关键字,所以不能使用final来定义 成员属性。 vfinal的特性: 使用使用finalfinal关键字标关键字标识识的类不能被继承;的类不能被继承; 使用使用finalfinal关键字标关键字标识识的方法不能被子类覆盖的方法不能被子类覆盖(重写)(重写), 是最终版本;是最终版本; v目的:一是为了安全,二是没有必要 6.2 static6
45、.2 static关键字的使用关键字的使用 vstaticstatic关键字表示静态静态的意思, 用于修饰类的成员属性和成员 方法(即为静态属性和静态方法)。 v类中的静态属性和静态方法不用实例化(new)就可以直接使用类 名访问。格式: 类类:$:$静态属性静态属性 类类:静态方法静态方法 v在类的方法中,不能用this来引用静态变量或静态方法,而需 要用selfself来引用。格式: self:$self:$静态属性静态属性 self:self:静态方法静态方法 v静态方法中不可以使用非静态的内容。就是不让使用$this$this。 v在一个类的方法中若没有出现$this的调用,默认此方法
46、为静态 方法。 v静态属性是共享的。也就是new很多对象也是共用一个属性。 getCount(); /通过对象也可以访问类中的静态方法,获取静态属性的值 3 6.3 6.3 单态设计模式单态设计模式 v单态模式的主要作用是保证在面向对象编程设计中,一个一个 类只能有一个实例对象存在类只能有一个实例对象存在。 ?php class DB private static $obj = null; /声明一个私有的,静态的成员属性$obj private function _construct() /私有构造方法,只能在类的内部实例化对象 echo 连接数据库成功; public static fun
47、ction getInstance() / 通过此静态方法才能获取本类的对象 if(is_null(self:$obj) /如果本类中的$obj为空,说明还没有被实例化过 self:$obj = new self(); /实例化本类对象 return self:$obj; /返回本类的对象 public function query($sql) /执行SQL语句完成对数据库的操作 echo $sql; $db = DB:getInstance(); /只能使用静态方法getInstance()去获取DB类的对象 $db - query(select * from user); /访问对象中的成
48、员 6.4 const6.4 const关键字关键字 vconstconst是一个在类中定义常量的关键字,我们都知道在PHP中 定义常量使用的是”define()”这个函数,但是在类里面定 义常量使用的是”const”这个关键字 vc constonst只能修饰的成员属性(常量属性),其访问方式和 static修饰的成员访问的方式差不多,也是使用”类名”, 在方法里面使用”self”关键字。但是不用使用”$ $”符号, 也不能使用对象来访问。 const CONSTANT =constant value; const CONSTANT =constant value; /定义定义 echo s
49、elf:CONSTANT; echo self:CONSTANT; /类内部访问类内部访问 echo ClassName:CONSTANT; echo ClassName:CONSTANT; /类外部访问类外部访问 6.5 instanceof6.5 instanceof关键字关键字 v“instanceofinstanceof”操作符用于检测当前对象实例是否属 于某一个类的类型。 总总 结结 v本章必须掌握的知识点:本章必须掌握的知识点: 类的继承应用类的继承应用 子类重载父类的方法子类重载父类的方法 finalfinal关键字的应用关键字的应用 staticstatic关键字的使用关键字的
50、使用 单态设计模式单态设计模式 constconst关键字关键字 instanceofinstanceof关键字关键字 谢谢 谢谢 PHP面向对象的程序设计 主讲:主讲: 电话:电话:400 700 1307400 700 1307 网址:网址: EmailEmail: 本章任务本章任务 v1. 面向对象的介绍 v2. 如何抽象一个类 v3. 通过类实例化对象 v4. 封装性 v5. 继承性 v6. 常见的关键字和魔术方法 v7. 抽象类与接口 v8. 多态性的应用 6. 6. 常见的关键字和魔术方法常见的关键字和魔术方法 v6.1 final6.1 final关键字的应用关键字的应用 v6.