PHP面向对象封装,继承,多态,接口,抽象类,重载

张开发
2026/4/30 1:07:11 15 分钟阅读

分享文章

PHP面向对象封装,继承,多态,接口,抽象类,重载
面向对象的三大特性三大特性封装继承和多态封装封装将一类相同的实体把他们的公共的属性和能力抽象出来形成计算机能够识别的类的过程。专业定义将数据属性以及和数据的操作方法捆绑到一起形成一个对外的实现的隐藏。封装的意义1.安全内部的操作以及数据的处理对外是隐藏2.方便访问外部只需要调用内部的属性和方法即可3.方便维护维护人员只需要修改类就可以修改所有的流程继承继承从法律意义上来讲继承人可以拥有被继承人的财产程序继承继承是面向对象特有的特征。子类继承父类之后子类可以使用父类里面定以后的数据和方法。//父类class Parent{protected $money 1000000;protected function makeMoney(){echo ‘Father makes money’;}}//子类class Son extends Parent{public function xuanyao(){$this-makeMoney();echo $this-money;}}$son new Son();$son-xuanyao(); //访问到父类的money属性和makeMoney方法多态多态多种形态父类的对象本质是子类可以调用子类的方法。多肽满足条件有继承有重写子类有父类的同名方法//父类class Father{public int function makeMoney(){system.out.println(‘Father makes Money’);return 0;}}//子类class Son extends Father{public int function makeMoney(){//重写父类方法system.out.println(‘Son makes Money’);return 0;}}//多态Father father new Son(); //Father类的对象本质上是Son对象father.makeMoney(); //Son makes MoneyPHP不支持多态PHP是一种弱类型语言重写子类拥有自己的与父类同名的方法重载指的是一个类拥有多个同名的方法但是其返回值或者参数列表或者参数类型不一致class Son{public int function eat(int a){system.out.println(‘吃饭’);return 0;}public string function eat(string a){system.out.println(‘吃饭’);return ‘’;}public string function eat(string a,int b){system.out.println(‘吃饭’);return ‘’;}}PHP是弱类型语言不支持传统意义上的方法重载。PHP继承PHP继承子类对象能够继承父类中定义的所有非静态属性和非私有的非静态方法。继承语法extends关键字子类 extends 父类属性继承效果方法继承效果继承优点1.减少代码量子类可以直接使用父类的某些方法和属性2.易于扩展可以基于父类已有的内容进行重新扩展重写protectedprotected是受保护的访问修饰限定符是专门用于修饰可以被继承的方法或者属性。表示当前属性或者方法父类的可以在子类中被子类对象所使用。继承访问虽然子类可以继承父类的私有属性但是却不能在子类中直接访问私有属性。私有属性只能在自己对应的类中被访问。php的继承是继承链自己的对象可以进入父类的类中进行父类私有内容访问。php中的继承实际上是对象与对象的继承子类对象继承父类对象子类对象在父类中访问子类自己的属性和方法重写如果在子类中有与父类同名的属性或者方法会被子类覆盖。重写只能重写非私有的属性继承的方法可以被重写注意重写必须要满足一个条件子类中的访问修饰限定符一定要比父类的权限要大于或者等于。子类重写父类的方法之后有时候需要执行父类的同名方法。parentparent表示父类的意思在子类中如果因为重写导致父类的方法没有办法被使用但是又需要调用父类的方法就可以使用parent关键字语法parent::父类的方法();parent 包含self和$this的功能注意虽然parent本身存在的意义是用来在子类中去调用父类被重写的方法但是parent可以调用父类的只要被继承的方法和有继承语法的静态方法都可以。php继承链php不允许多继承一个类只能继承自一个父类。class Son extends Father,Mother //PHP中不可以php可以通过链式继承实现多继承class Father extends Mother;class Son extends Father; //son对象也继承了mother的属性和非私有方法继承内存分析继承的使用要操作数据库的具体操作使用DB类进行数据库联合和处理如果按照以上方式设计DB类的方法都不允许在外部直接使用将DB类的方法改成protected特殊类不能被继承的类final类类是最终类不允许该类再产生子类。语法final class 类名{}最终类有什么好处保护类的结构不被扩展。final还能修饰方法表示该方法不能被子类重写只能被继承的类abstract类abstract是抽象abstract所修饰的类被称之为抽象类抽象类不能被实例化只能被继承。只能被继承abstract还能修饰方法abstract修饰的方法不能有方法体被称之为抽象方法有抽象方法的类一定是抽象类不能被实例化只能被继承抽象类抽象方法类必须声明为抽象类继承抽象类需实现所有抽象方法抽象类可以继承抽象类可以不实现父类的抽象方法抽象类的意义1.规范程序的编写一般情况下是较大的项目项目团队比较大而且针对不同的方向但是有相同的结构使用抽象类进行结构规范命名规范抽象类中除了多了抽象方法之外可以拥有一个类所能拥有的全部内容属性方法和类常量抽象类中的抽象方法不能是私有。interface接口接口定义使用层面一个封闭的结构对外提供的允许使用的方式结构层面专门用于规范类的结构的结构体与抽象类相似语法interface 接口名字{//接口体}接口使用接口不能实例化。接口是用于规范类的结构类是用来实现接口。语法class 类名 implements 接口名{//类成员}接口成员接口中只能放两个内容常量和公有抽象方法注意类实现接口必须实现接口中的所有抽象方法。接口意义接口不能单独操作专门为类准备用来规范类内部的结构的。一般较小的项目如果想使用规范一般使用抽象类如果较大的项目有N多个团队规范采用接口。接口的继承接口不能被类继承只能被类实现implements接口可以被接口自己继承类可以实现多个接口问题1.php类继承是否支持多继承不支持但是可以通过继承链来实现一个子类继承多个类2.抽象类是不是类抽象类是类但是是特殊类不能被实例化只能被继承3.接口是不是类接口是不是抽象类接口就是接口不是类。静态继承php中的继承只继承非静态属性和非私有的非静态方法。静态的属性 和方法都不算在继承的概念里面。静态的东西属于类继承的本质是对象的继承。虽然静态内容不属于继承的范畴但是静态也可以通过访问修饰限定符实现类似继承的功能。公有的和受保护的依然可以在子类中使用父类的。继承中静态的内容不会被重写PHP重载PHP重载指的是当一个对象类去访问一个类中不存在的或者权限不够属性或者方法时候会自动触发的魔术方法。php重载分为两种属性重载和方法重载属性重载访问不存在的属性或者没有权限访问的属性的时候会自动触发的魔术方法。__get()获取数据__set()设置数据给对象设置属性的时候如果属性没有权限或者不存在就会自动触发的方法php增加不存在的属性注意php增加属性会破坏对象的结构__set获取设置不存在的值结构控制__isset()isset和empty时调用判断数据当判断对象是否存在某个属性的时候而属性权限不够或者不存在的时候会自动触发__unset()unset调用删除数据重载的意义1.容错处理不让用户在操作的时候因为操作不当导致出错2.限制对象的结构空间属性范围方法重载访问一个不存在的或者权限不够的方法的时候会自动触发的魔术方法。__call()非静态方法__callStatic()静态方法当使用类访问一个不够权限的或者不存在的静态方法时候会自动触发的方法。

更多文章