继承和访问控制-php课件PPT幻灯片.pptx_第1页
继承和访问控制-php课件PPT幻灯片.pptx_第2页
继承和访问控制-php课件PPT幻灯片.pptx_第3页
继承和访问控制-php课件PPT幻灯片.pptx_第4页
继承和访问控制-php课件PPT幻灯片.pptx_第5页
已阅读5页,还剩15页未读 继续免费阅读

下载本文档

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

文档简介

继承和访问控制,1,现实世界中的继承,在生物课中我们学习过动物的纲目,这就是最直接的继承关系,越往上越抽象,越往下越具体,父类型描述的是子类型的共性,而子类型则拥有自己的特性,2,理解继承,某一类事物,拥有另一类事物的部分特性,另外又拥有自己的特点,使得它们既相似又不同譬如孩子跟母亲长得像,但是孩子的身高却比母亲还高,这就是继承再譬如,汽车可以派生出燃油汽车和电动汽车两大类,它们都拥有汽车的外观,但是动力系统却各不相同,3,程序中的继承,如果一个类A继承自另一个类B,就把这个A称为“B的子类”,而把B称为“A的父类”。继承可以使得子类具有父类的各种属性和方法,而不需要再次编写相同的代码。在子类继承父类的同时,可以重新定义某些属性,并重写某些方法,即覆盖父类的原有属性和方法,使其获得与父类不同的功能。另外,为子类追加新的属性和方法也是常见的做法类的继承可以无限层级:A继承自B、B继承自C、C继承自D,4,继承User类,PHP中,使用关键词extends来表明继承关系classAdminextendsUserpublic$newProp;上面定义了一个新的类叫Admin,它继承自User类,那么,即使我们不在Admin里定义任何代码,我们也可以实现下面的功能$admin=newAdmin();$admin-getName();因为Admin类继承了User类的属性和方法,程序如果在Admin类没有找到getName方法,会自动去父类调用,甚至是爷爷类,5,思考,如果父类中定义了方法getName,而子类中又定义了同名的方法getName请问,子类实例化出来的对象执行getName方法,最终调用的是哪个类中的方法?如果子类中确实想要调用父类的getName怎么办?,6,parent:,子类继承父类,则子类中可以直接调用父类的方法classParentClspublicfunctionfoo()classChildClsextendsParentClspublicfunctionbar()$this-foo();但是,如果ChildCls中的方法名换成foo,那么使用$this-相当于死循环,这是可以使用parent:foo()来代替,7,Admin类继承User类,User,属性,方法,继承,Admin,属性,方法,新属性,新方法,8,继承的好处,从前面的例子可以看到,继承有两大好处提高重用性,降低代码冗余,子类中与父类完全相同的属性和方法不必重写,只需写出新增或改写的内容,这就是说子类可以复用父类的内容,不必一切从零开始规范子类的行为,子类的属性和方法是遵循和依照父类而存在的,两者有近乎一致的特性和功能,9,访问控制符,我们已经在前面学习了访问控制符public和private在读写属性和调用方法时的作用,那么在继承关系中,访问控制符会有什么效果呢?标记为public的属性和方法,可以被子类完全继承标记为private的属性和方法,无法被子类继承那么,如果有这样的需求:一个属性或者方法,我虽然不想通过对象能直接访问或者调用,但是还是允许继承给子类,怎么办?将属性或者方法标记为protected,对象无法直接读写属性或者调用方法,但是父类中protected的属性和方法是可以被子类继承的,10,理解访问控制的继承,private不可以被继承,所以我们不讨论,而无论是public还是protected,被子类继承后,其访问控制仍然是原来的控制符,父类,子类,private,public,protected,public,protected,11,final,如果一个类不希望被其他的子类继承,我们可以给类增加一个final关键词finalclassUser这样的话,如果有其他的类尝试extendsUser类,PHP会报错,12,创建分页类,创建一个分页类Pager可以在构造函数中传入总页数和当前页数类中定义一个render方法用来构造分页HTML实例化出的对象调用render后可以直接输出分页的HTML类中有方法可以控制是否显示上一页和下一页,必须在render之前调用类中有方法可以设置页码参数的名称,可以将默认的page改为其它参数,13,Pager类,classPagerprotected$totalPages;private$currentPage;private$url;private$pageParam=page;private$showPreNext=true;private$hasQuery=false;,14,classPagerpublicfunction_construct($totalPages,$currentPage)$this-totalPages=$totalPages;$this-currentPage=$currentPage;$matches=$_GET;if(isset($matchespage)unset($matchespage);if(count($matches)$this-hasQuery=true;$this-url=$_SERVERSCRIPT_NAME.?.http_build_query($matches);else$this-url=$_SERVERSCRIPT_NAME;,构造函数,15,生成页码,classPagerpublicfunctionrender()echo;$this-renderPrePage();for($i=1;$itotalPages;$i+)echourl.($this-hasQuery?,16,上一页和下一页,classPagerprotectedfunctionrenderPrePage()if($this-showPreNext,17,classPagerpublicfunctionsetUrl($url)$this-url=$url;return$this;publicfunctionsetPageParam($pageParam)$this-pageParam=$pageParam;return$this;publicfunctionsetShowPreNext($preNext)$this-showPreNext=$preNext;return$this;,其它方法,18,继承分页类,假设有需求,我们需要显示下拉形式的分页效果,页码以的形式展开,其他逻辑保持不变不可以修改Pager类的代码,请设计一个新的分页类新的分页里需要继承自Pager类不可以将Pager类的代码直接复制到新的类里,19,includePager.class.php;cla

温馨提示

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

评论

0/150

提交评论