当前位置: 首页 > 后端技术 > PHP

PHP面向对象详解

时间:2023-03-29 13:54:46 PHP

前言自PHP进入5.0版本以来,PHP已经全面支持面向对象编程。好吧,谁说php很低。我们可以专注于网络开发吗?谁说php代码不好,自己写的代码当然不好;谁说php框架不优雅,你用过laravel吗?好吧,让我们进入正题。面向对象的三大特点是封装、继承和多态。使用面向对象开发可以大大提高我们程序的可维护性和可扩展性。基础知识类:具有相同属性或方法的聚合类。例如雪佛兰汽车是雪佛兰汽车类,梅赛德斯-奔驰汽车是奔驰汽车类,宝马汽车是宝马汽车类,这三个类都是汽车类的子类。Object:类的具体实现,比如BMWQ5就是BMW汽车类的具体实现。对象存储在内存中。让我们用面向对象来理解对象在内存中的分配,也就是灵活运用以上两个知识点。让我们创建和使用类和对象a="opt";//在opt对象中添加a属性赋值是opt$opt->funA();//打印出“我是函数A”?>修饰符:定义类和类中的属性,我们可以使用下面三个修饰符,如果不加,则默认为publicpublic:最大权限protected:权限范围在自身及其子类内private:权限范围只在自身内<字体颜色="blue"size="4">构造函数和析构函数:在我们实例化类创建对象的时候,往往需要对对象进行初始化。这时候我们就需要在类中定义一个构造函数。当我们使用完对象后,我们需要释放对象以减少内存使用,这时我们需要使用析构函数方法。在php中我们使用了__construct()方法和__destruct(),如下代码a=$a;$this->b=$b;echo"我是构造函数";}publicfunction__destruct(){echo"我是析构函数";}}?>封装当我们开发一些重要的程序模块时,往往不希望别人能够轻易的访问到这些程序模块的数据,所以需要对这些数据进行封装。这时候我们就需要进行数据访问控制,往往会使用private关键字来封装这些属性和方法。如下这样我们在创建对象的时候就不能调用私有的属性和方法了。但是我们可以通过使用魔术方法来访问这些私有属性和方法。__set()和__get()的使用通过__set()方法,我们可以直接通过对象设置成员属性值通过__get()方法,我们可以直接通过object$oldValue=$newvalue;}公共函数__get($newvalue){返回$newvalue;}}$opt=newsetClass();$opt->a="sss";//直接设置私有属性值echo$opt->b;//直接读取私有属性值?>__isset()和__unset()是通过__isset()直接检查对象中是否有私有属性直接通过__unset()删除对象中的私有属性$b);var_dump(unset($opt->$b));?>Inheritance当我们写多个类的时候,往往多个类的属性和方法都是一样的,为了简化生成代码我们引入继承的概念,子类可以继承父类的一些属性和方法,减少冗余代码的编写如何写继承类我们使用关键字extends来写子类如上,childClass是parentClass的子类。PHP只支持单继承,即一个子类只有一个父类,但是一个父类可以有多个子类。重写父类方法当父类中的方法不能满足子类的使用时,我们可以重写父类方法。但是当我们想在子类中使用父类的方法时,可以使用如下语法:parent::方法名几个重要的关键字3.1finalfinal可以修饰类和方法,但不能修饰成员属性;被final修饰的类不能被继承,用final修饰的方法不能在子类中重写3.2staticstatic可以修饰成员属性和成员方法,但不能修饰类;用static修饰的成员和方法可以直接通过类使用,语法如下:类名::\$属性名或方法名();在类中使用时,使用以下语法:self::\$属性名或方法名。3.3const使用const代替define()在类中声明常量;例如constTT=90使用常量时,直接使用如下语法self::constantname3.4instanceof使用该关键字检测一个实例是否为某个类的实例。3.5traitphp只能进行单继承,但是它也提供了一种替代的方式来重用代码来解决单继承的问题。如下``````抽象技术abstract关键字修饰的方法和类称为抽象方法或抽象类。声明抽象类和抽象方法抽象技术为子类的声明提供了规范,限制了类的实例化(抽象类不能被实例化)。接口技术接口是一个特殊的抽象类。在接口中,只能声明抽象类和常量。接口用于声明接口,而实现用于实现接口。修饰符只能是默认的public;一个子类可以继承多个接口,同时继承一个父类PHP中的多态性要求一个类通过多个子类的继承来实现。如果一个类的一个方法在多个子类中被重写,实现了不同的Functionality,我们称之为多态。