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

【PHP】面向对象程序设计

时间:2023-03-30 03:22:56 PHP

之前的相关问题面向对象和面向过程的区别,各自的优缺点面向对象的基本特点是什么?各自的特点带来什么好处?面向对象的基本语法?面向对象基本特性的基本实现面向对象结合各种设计模式的使用面向对象的优点是易于维护、易于重用、易于扩展,因为面向对象具有封装、继承、和多态性,可以设计低耦合的系统,使系统更加灵活,更易于维护。面向对象封装的三大特点:即将客观事物封装成抽象类,类只能让受信任的类或对象操作自己的数据和方法。不可信任的信息隐藏。封装是面向对象的特征之一,是对象和类概念的主要特征。简单地说,类是封装数据和操作该数据的代码的逻辑实体。在对象内部,一些代码或一些数据可以是私有的,不能被外界访问。通过这种方式,对象为内部数据提供了不同级别的保护,防止程序中不相关的部分意外更改或错误地使用对象的私有部分。继承:是一种允许一种类型的对象获得另一种类型对象的属性的方法。它支持按级别分类的概念。在OOP中,继承的概念支持代码的可重用性(reusability),即我们可以在不改变类的情况下,为一个已有的类增加新的特性。这可以通过从这个现有类派生一个新类来实现。这个新类将具有原始类的属性以及新属性。继承机制的魅力和强大在于,它允许程序员使用一个已有的类(接近需要,而不是完全满足需要的类),并且可以在不影响其他东西的情况下,以一定的方式修改这个类。:多态是指类实例的同一个方法在不同的情况下有不同的表现形式。多态性使具有不同内部结构的对象共享相同的外部接口。这意味着虽然针对不同对象的具体操作不同,但是可以通过一个公共类以相同的方式调用它们(那些操作)。PHP面向对象的基本语法声明一个类:使用一个class关键字,提供一个类的名称,然后列出这个累实例应该具有的方法和属性。classMyClass{...//propertylist...//methodlist}new关键字和构造类的实例都是使用new关键字创建的。$zhangsan=newPerson();上面的代码创建了Person类的一个实例。当调用new时,PHP将分配一个新对象并从您定义的类中复制属性和方法。那么如果你定义的对象是构造函数的话,它会被自动调用,用new关键字创建对象后会自动复活。构造函数通常用于自动执行许多初始化操作。构造函数还接收参数并使用$this变量访问方法和属性。当对象的方法被执行时,PHP会自动定义一个特殊的变量$this,它代表对对象本身$this->name的引用;//访问$name为非静态属性(注意不要在属性名前加$符号)$this->getName();//调用类的非静态方法public、protected和private属性和方法静态属性不同于常规属性,静态属性属于类本身,不属于类的任何力量。静态属性是使用static关键字定义的。访问静态属性:使用类名或使用特殊的类名self来访问它,self是方法所属类的缩写。打印MyClass::$staticName;打印self::$staticName;//在类方法中调用静态方法静态方法是类的一部分,不属于类的任何实例。您不能在静态方法中使用任何$this,因为静态方法与实例无关。类名::方法();自我::方法();类常量类似于静态成员,因为它们属于类本身而不是类的实例。类常量区分大小写。类MyClass{constRED='red';函数颜色(){返回自我::红色;}}printMyClass::RED;$obj=newMyClass();$obj->color();多态类Cat{publicfunctionmiau(){print'miau';}}classDog{publicfunctionwaff(){print'waau';}}functionmakeSound($obj){if($objinstanceofCat){$obj->miau();}elseif($objinstanceofDog){$obj->waff();}else{打印“错误:传递错误类型的对象!”;}打印“\n”;}makeSound(新猫());makeSound(新狗());上面的例子是不可扩展的。如果要添加第三种动物声音,则必须在makeSound()函数中添加esleif语句。多态可以用来解决这个问题classAnimal{publicfunctionmakeSound(){print"Error:shouldimplementedclass";}}classCatextendsAnimal{publicfunctionmakeSound(){print'miau';}}classDogextendsAnimal{publicfunctionmakeSound(){print'waau';}}functionmakeSound($obj){if($objinstanceofAnimal){$obj->makeSound();}else{打印“错误:传递了错误的对象!”;}打印“\n”;}makeSound(新猫());makeSound(newDog());抽象类abstract如果类中定义了抽象方法,那么这个类必须定义为抽象类,抽象类中的抽象类的功能没有实现,所以不是一个完整的类,所以抽象类不能被实例化。如果一个类继承了一个抽象类,那么这个类必须实现抽象类接口interface的抽象方法接口Loggable{functionlogString();functionlogErr();}接口中的方法都是抽象的,也就是说没有一个方法被实现