面向对象(OOP)一

不羁岁月 提交于 2020-03-13 00:25:50

一、面向对象理论

  1)面向对象概念

    面向对象编程(object Oriented Programming,OOP),是一种计算机编程构架,OOP达到软件工程的三个目标重用、灵活和扩展性

  2)什么是对象?

    对象是系统中用来描述客观事物的一个实体,包含了若干变量和函数的一个软件集合。客观世界是由对象和对象之间的联系组成。

    (万事万物皆对象)

  3)什么是类?

    类是一组有相同属性和方法的一组对象集合。它属于该类的所有对象提供了统一的抽象描述。其内部包括属性和方法两个主要部分。

  4)类和对象的关系

    类和对象的关系就好比如模具和铸件的关系。类的实例化结果就是对象,而对一类的对象抽象就是类。类描述了一组有相同特征(属性)和相同行为(方法)的对象。

    属性:类的静态描述,相当于变量。

    方法:类的动态描述,相当于方法。

  5)类的定义 :        class 类名

    命名规则:驼峰式命名,首字母大写,如果多个单词,每个单词首字母大写

  demo:

  class car{

    public $color;//颜色,静态 属性,相当于一个变量

    //开动,动态,方法,相当于一个函数

    public function run(){

      echo "开车";

    }

  }

  $car1 = new car();//实例化得到一个对象,该对象拥有car类的属性和方法

  $car1->color="red";属性调用,对象->属性  这部汽车为红色,给color属性附上红色

  echo $car1->color //输出red;

  $car1->run();//方法调用  对象->方法

  在对象的外部访问成员的形式是 对象->成员 如果在对象内部则使用一个本对象的引用 "$this "每个对象都有一个对象的引用"$this "来代表这个对象,完成对象内部的调用

  大多数类都有一种统称为构造函数的特殊方法,当创建一个对象时,它将自动调用构造函数,也就是使用new关键字来实例化对象的时候就自动调用构造方法。

  构造函数的定义有两种

    1、与类名同名

    2、__construct();   php5后支持;推荐使用

  在一个类中只能有且一个构造方法,只有每次创建对象的时候去调用一次构造方法,不能主动调用,所以它通常执行一些有用的初始化任务,比如对成员属性的赋值等。

   与构造函数相对的就是析构函数,析构函数时PHP5新加的内容,析构函数允许在销毁一个对象之前执行一些操作和完成一些功能。比如说关闭文件、释放结果集等,其意义远不及构造函数。

  析构函数在对象所有引用都被删除或对象被显性销毁是执行

  析构函数的定义: __destruct();

  析构函数无法传参

二、继承和重载

  继承是面向对象的重要特性之一。继承是子类自动共享父类的数据结构和方法的机制。这是类之间的一种关系。子类可以再父类的基础上定义自己的属性和方法。

  通过继承机制,可以利用现有的数据类型来定义新的数据类型,所定义的新的数据类型不仅有新定义的成员,还拥有旧的成员。我们称已存在的用来派生的新类叫基类,又称为父类或超类,派生出来的新类称为派生类或子类。

  继承关键字:    extents

  单继承与多继承: PHP只支持单继承

  所谓的方法重载就是定义相同的方法名,严格来说php中的方法是不能重载的,这里说的重载方法是指子类覆盖父类已有的方法,一般又称为重写。

  在子类中,重写/覆盖从父类中继承过来的属性和方法

  多态

  在类中只要参数的个数或类型不同,方法可以重名,又称为多态。

  php不支持,只有强类型语言才可以实现。

  强类型语言:java c#等

  php无法实现多态、因为php是弱类型语言,与多态的概念冲突

类型的访问修饰符都成员的访问进行限制,分别有:

  public 公共的      同一个类中  类的子类  所有的外部成员

  protected 受保护的     同一个类中 类的子类

  private 私有的     同一个类中

重载的属性/方法 不能小于父类

public>protected>private

三、封装

  封装性把对象的成员属性和成员方法结合成了一个独立的相同的单位,并尽可能隐藏其内部细节,只保留可以对外有访问权限的方法和外部产生联系。

四、final关键字  

  final只能用来定义类和方法,不能定义属性

  使用final 关键字的类不能被继承,使用final 关键字的方法不能被子类覆盖,是最终版本。

  定义:final class 类名  、final public function 方法名();

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!