php面向对象续3.ppt_第1页
php面向对象续3.ppt_第2页
php面向对象续3.ppt_第3页
php面向对象续3.ppt_第4页
php面向对象续3.ppt_第5页
已阅读5页,还剩33页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、LAMP 项目开发,接口的定义与规范 接口的定义 接口中的抽象方法 接口中抽象方法的修饰和访问权限 接口中的静态抽象方法 接口中的静态常量 实现接口 使用implements实现接口 实现多个接口 继承并实现接口 接口的继承 接口实现继承 接口可以实现多继承 抽象类实现接口,类型提示 没有类型提示很危险 原始类型的类型判断 向方法内传递对象 类型提示保障数据安全 PHP5中的多态 通过实现接口实现多态 通过继承关系实现多态 instanceof运算符 instanceof运算符的运用 使用instatnceof运算符保障代码安全 使用接口与组合模拟多继承 通过组合模拟多重继承 不完全的多重继承

2、 使用接口实现多重继承 接口实例 简单工厂模式,接口的定义与规范,接口(interface)是抽象方法和静态常量定义的集合。 接口是一种特殊的抽象类,这种抽象类中只包含抽象方法和静态常量。 接口中没有其它类型的内容。,接口中抽象方法的修饰和访问权限,在接口中的抽象方法只能是public的,默认也是public权限。并且不能设置成 private 或者 protected 类型。 否则会报错如下: Access type for interface method User:setName() must be omitted in on line (在接口中,访问类型必须忽略。),一个简单的接口.

3、 接口中的方法默认是public 型的. 其它类型的修饰符,不能修饰接口中的抽象方法. Private、protecte、final、abstract都不能修饰接口中的抽象方法,接口中的静态抽象方法,在接口中可以使用静态抽象方法。在PHP5.2中,不建议在抽象类中使用静态抽象方法。 而接口中依然保留了静态抽象方法。 ,接口中的静态常量,在接口中可以定义静态常量。而且不用static修饰就是静态的常量。 ,实现接口,类实现接口要使用 implements 。 类实现接口要实现其中的抽象方法。 一个类可以实现多个接口。 一个类可以使用 implements 实现接口,甚至可以实现多个接口。 大部分

4、的书说,这样是为了实现PHP的多继承。为什么呢? PHP5是单继承的,一个类只可以继承自一个父类。接口可以实现多个,这样就是多继承了。,使用implements实现接口,name; function setName($_name) $this-name = $_name; $normalUser = new NormalUser(); /创建对象 $normalUser-setName(“tom”); /设置 nameecho UserName is . $normalUser-getName();echo ; echo “MAX_GRADE is ” . NormalUser:MAX_GRA

5、DE; /静态常量 ?,实现多个接口,继承并实现接口,grade; interface User function getName(); function setName($_name); ,/只有管理员可以设置公告 interface Administrator function setBulletin($_bulletin); /为了节省版面,下面方法只写空的实现.不写具体内容了. class StudentAdmin extends Student implements User,Administrator function getName() function setName($_na

6、me) function setBulletin($_bulletin) $s = new StudentAdmin(); echo $s-getGrade();echo $s-getName(); echo $s-setBulletin(公告内容); ?,接口的继承,一个接口可以继承自另外的接口。 PHP5中的类是单继承,但是接口很特殊。一个接口可以继承自多个接口。 一个接口继承其它接口时候,直接继承父接口的静态常量属性和抽象方法。 在PHP5中,接口是可以继承自另外一个接口的。这样代码的重用更有效了。 要注意只有接口和接口之间使用 继承关键字 extends。 类实现接口必须实现其抽象方法

7、,使用实现关键字 implements。,name; public function setName($_name)/实现setName方法 $this-name = $_name; public function getDiscount()/实现折扣方法. return $this-discount; ?,接口可以实现多继承,抽象类实现接口,抽象类实现接口,可以不实现其中的抽象方法,而将抽象方法的实现交付给具体能被实例化的类去处理。,name; /这里实现了接口的另外一个方法. class NormalUser extends AbstractNormalUser public functi

8、on setName($_name) $this-name = $_name; $normalUser = new NormalUser(); $normalUser-setName(tom); echo name is .$normalUser-getName(); ?,类型提示,PHP是弱类型语言,向方法传递参数时候也不太区分类型。这样的使用会引起很多的问题,PHP开发者认为,这些问题应该是由代码书写者在书写代码时进行检验以避免。 没有类型提示很危险,下面的代码可能会出现问题。,age = $_age; public function getAge() return $this-age ;

9、 $normalUser = new NormalUser(); $normalUser-setAge(I am tom); /这里我们传输一个非数值. echo age is .$normalUser-getAge();/注意输出结果不是我想要的类型. ?,原始类型的类型判断,PHP中提供了一些函数,来判断数值的类型。我们可使用is_numeric()。判断是否是一个数值或者可转换为数值的字符串。 其它相关的还有is_bool()、is_int()、is_float()、is_integer()、is_numeric()、is_string()、is_array() 和 is_object(

10、)。,age = $_age; public function getAge() return $this-age ; $normalUser = new NormalUser(); $normalUser-setAge(I am tom); /这里我们传输一个非数值. echo age is .$normalUser-getAge();/看到这里的结果为空. echo ;$normalUser-setAge(100); echo age is .$normalUser-getAge();/ 这里就有了结果. ?,向方法内传递对象,name = $_name; /这里有存入数据库等等代码. p

11、ublic function getName() return $this-name; class UserAdmin /这里定义的参数,第一个是User类的实例,第二是要设置的名字. public static function changeName($_user,$_name) $_user-setName($_name); $normalUser = new NormalUser(); UserAdmin:changeName($normalUser,Tom); echo userName is . $normalUser-getName(); ?,类型提示保障数据安全,为了避免对象类型

12、不规范引起的问题,PHP5中引入了类型提示这个概念。 在定义方法参数时,同时定义参数的对象类型。 如果在调用的时候,传入参数的类型不对会报错。这样保证了数据的安全性。,name = $_name; public function getName() return $this-name; class UserAdmin public static function changeName(NormalUser $_user,$_name)$_user-setName($_name); UserAdmin:changeName(anyType,Tom); ? 建议在定义方法参数时,要使用类型提示。

13、如果类型不是对象,要采用代码进行类型建议,以增强安全性。,PHP5中的多态,多态这个概念,在Java中指的是变量可以指向的对象的类型,可是变量声明类型的子类。对象一旦创建,它的类型是不变的,多态的是变量。 在PHP5中,变量的类型是不确定的,一个变量可以指向任何类型的数值、字符串、对象、资源等。我们无法说PHP5中多态的是变量。 我们只能说在PHP5中,多态应用在方法参数的类型提示位置。 一个类的任何子类对象都可以满足以当前类型作为类型提示的类型要求。 所有实现这个接口的类,都可以满足以接口类型作为类型提示的方法参数要求。 简单的说,一个类拥有其父类、和已实现接口的身份。,通过实现接口实现多态

14、,name; public function setName($_name) $this-name = $_name; class UserAdmin /操作. public static function ChangeUserName(User $_user,$_userName)$_user-setName($_userName); $normalUser = new NormalUser(); UserAdmin:ChangeUserName($normalUser,Tom);/这里传入的是 NormalUser的实例. echo $normalUser-getName(); ?,通过继

15、承关系实现多态,name; public function setName($_name) $this-name = $_name; class UserAdmin /操作. public static function ChangeUserName(User $_user,$_userName) $user-setName($_userName); $normalUser = new NormalUser(); UserAdmin:ChangeUserName($normalUser,Tom);/这里传入的是 NormalUser的实例. echo $normalUser-getName()

16、; ?,instanceof运算符,在PHP5中,通过方法传递变量的类型有不确定性。 于是我们很难判断,一些操作是否可以运行。 使用instanceof运算符,可以判断当前实例是否可以有这样的一个形态。 当前实例使用 instanceof与 当前类,父类(向上无限追溯),已经实现的接口比较时,返回真。 代码格式 实例名 instanceof 类名,name; class NormalUser extends User private $age = 99; public function getAge() return age is .$this-age; ,class UserAdmin /操

17、作. public static function getUserInfo(User $_user) if($_user instanceof NormalUser )echo $_user-getAge(); else echo 类型不对,不能使用这个方法.; $User = new User(); / 这里new的是User. UserAdmin:getUserInfo($User); ?,使用接口实现多重继承,name; class Teacher implements TeacherInterface /实现TeacherInterface接口 private $lengthOfSer

18、vice = 5; / 工龄 public function getLengthOfService() return $this-lengthOfService; ,/ 继承自User类,同时实现了TeacherInterface接口. class GraduateStudent extends User implements TeacherInterface private $teacher ;public function _construct()$this-teacher = new Teacher(); public function getLengthOfService() return $this-teacher-getLengthOfService(); class Act/注意这里的类型提示改成了接口类型 public static function getUserName(UserInterface $_user) echo Name is

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论