Blogger Information
Blog 16
fans 0
comment 0
visits 11181
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template
面向对象的概念(老师版)
逃逃
Original
3232 people have browsed it

一、面向对象的概念

1.1 什么是面向对象(object oriented)

  • 世间万物皆对象,抽象的也是对象,一切可见或不可见都是对象,面向对象是一种以对象为基础的编程思想(自下而上)
  • 面向过程是一种以过程为中心的编程思想:分析出解决问题所需要的步骤,然后用函数把这些步骤一步一步实现(自上而下)

1.2 对象的基本组成

  • 对象的组成元素:是对象的数据模型,用于描述对象的数据,又称为对象的属性,或者对象的成员变量.
  • 对象的行为: 是对象的行为模型,用于描述对象能够做什么事情,又被称为对象的成员方法.

1.3 对象特点

  • 每一个对象都是独一无二的
  • 对象是一个特定的事物,他的职能是完成特定功能
  • 对象是可以重复使用

1.4 面向对象简介

  • 面向对象编程就是编程的时候数据结构(数据组织方式 )都通过对象的结构进行存储,使用属性方法组织起来

1.5 面向对象的实质

-面向对象就是把生活中要解决的问题都用对象的方式进行存储—把所有的数据用属性、方法表现出来。对象之间的互动是通过方法的调用完成互动

二、面向对象的基本实践

2.1 类的概念

  • 物以类聚,把具有相似特性的对象对垒到一个类中,类定义了这些相似对象拥有的相同的属性和方法
  • 类是相似对象的描述,成为类的定义,是该类对象的蓝图或者原型
  • 类的对象称为一个类的实例(Instance)
  • 类的属性和方法统称为类成员

2.2 类的实例化

  • 类的实例化:通过类定义创建一个类的对象
  • 类的定义属性值都是空或默认值,而对象的属性都有具体的值

2.3 类的定义

  • 类的定义以关键字 class 开始,后面跟着这个类的名称。类的命名通常每个单词的第一个字母大写,以中括号开始和结束
  • 类的实例化为对象时使用关键字 new,new 之后紧跟类的名称和一对圆括号
  • 对象中得成员属性和方法可以通过->符号来访问

三、面向对象的高级实战

3.1 对象的继承

父类:拥有部分相同的属性和方法
继承的好处:

  • 父类里面定义的类成员可以不用在子类中重复定义,节约了编程的时间和代价;
  • 同一个父类的子类拥有相同的父类定义的类成员,因此外部代码调用他们的时候可以一视同仁;
  • 子类可以修改和调用父类定义的类成员我们称为重写(Overwrite), 一旦子类修改了,就按照子类修改之后的功能执行;

子类

  • 子类可以通过$this 访问父类的属性
  • 子类的对象可以直接调用父类的方法和属性
  • PHP 的单继承特性:类不允许同时继承多个父类(extends后面只能跟一个父类名称)

3.2 访问控制

面向对象的三种访问权限:

  • public 是公有的类成员,可以在任何地方被访问,可以被类以及子类或者对象都可以访问;
  • protected 受保护的类成员,可以被其自身以及继承的子类访问,可以被子类继承,但是不能被对象访问,只能通过封装的方式让对象访问;
  • private 私有的类成员,只能被自身访问.不能被子类继承,也不能被对象访问,只能在自身通过封装让外界访问(例如在类里面定义一个公开方法来调用私有属性);

3.3 Static(静态)关键字

静态成员:定义时在访问控制关键字后添加static关键字即可(访问控制关键字:public. protected. private)

  • 静态属性用于保存类的公有数据,可以在不同对象间共享
  • 静态方法里面只能访问静态属性
  • 静态成员不需要实例化对象就可以访问
  • 类的内部可以通过 self:: 或 static:: 关键字访问自身静态成员,self::$属性 self::方法()
  • 通过 parent:: 关键字访问父类的静态成员,也可以通过子类::父类静态成员
  • 通过 类名:: 的方式在类的外部访问静态成员

3.4 重写和 Final 关键字

  • 子类中编写跟父类完全一致的方法可以完成对父类方法的重写,方法参数最好有默认参数
  • 对于不想被任何类继承的类可以在 class 之前添加 final 关键字
  • 对于不想被子类重写(overwrite, 修改)的方法,可以在方法定义前面添加 final 关键字

3.5 数据访问

  • parent 关键字可以可用于调用父类中被子类重写了的方法
  • self 关键字可以用于访问类自身的成员方法,静态成员和类常量;不能用于访问类自身的属性!!!使用常量的时候不需要在常量 const 名称前面添加$符号
  • static::关键字用于访问类自身定义的静态成员,访问静态属性时需要在属性前面添加$符号。
  • 常量属性 const 不能使用对象访问,仅能使用类访问,在类本体内可以使用“self::常量名”,在类本体外可以使用“类名::常量名”

3.6 对象接口

接口就是把不同类的共同行为进行定义,然后在不同的类里面实现不同的功能

  • interface定义接口,implements用于表示类实现某个接口
  • 接口里面的方法没有具体的实现,无{}
  • 实现了某个接口的类必须提供接口中定义的方法的具体实现
  • 不能实例化接口,但是能够判断某个对象是否实现了某个接口。instanceof关键字判断某个对象是否实现了某个接口 $object instanceof interface
  • 接口可以继承接口(interface extends interface
  • 接口中定义的所有方法都必须是公有,这是接口的特性

3.7 多态

因为接口的方法实现可以有很多,所以对于接口里面定义的方法的具体实现是多种多样的,这种特性我们称为多态

不需要知道对象属于哪个类,只要判断该对象的类是否实现接口,就能实现调用,相同代码实现不同结果

形象点说就是同一个接口,不同的对象实现,得出的结果不一样就是多态,如传入的是人类对象,得到的是人类吃苹果,传入的是猴子对象,得到的就是猴子吃香蕉。相同的一行代码,对于传入不同的接口的实现的对象的时候,表现是不同的。

3.8 抽象类

接口里面的方法都是没有实现的,而类里面的方法都是有实现的. 有没有一种形态,允许类里面一部分方法不实现呢?

  • 当接口中的某些方法对于所有的实现类都是一样的实现方法,只有部分方法需要用到多态的特性

  • 如人和动物吃东西是不同的,但是呼吸是相同的,不需要为人和动物分别实现呼吸的功能

  • abstract 关键字用于定义抽象类
  • 在抽象方法前面添加 abstract 关键字可以标明这个方法是抽象方法不需要具体实现{}
  • 抽象类中可以包含普通的方法,有方法的具体实现
  • 继承抽象类的关键字是 extends
  • 继承抽象类的子类需要实现抽象类中定义的抽象方法
  • 抽象类不能被实例化,当子类继承抽象类的时候,所有的抽象的方法都必须定义

四、PHP 面向对象的特殊实践

4.1 魔术方法之_toString()和 invoke()

  • toString()当对象被当作 String 使用时,这个方法会被自动调用(需要在类中定义tostring()方法。调用 echo $object
  • invoke()当对象被当作方法调用时,这个方法会被自动调用(需要在类中定义invoke()方法)。调用 $object($parameter)

4.2 魔术方法之call()和callStatic()

__call()方法:当对象访问不存在的方法名称时,此方法自动调用。

  • 调用示例:public function __call($name,$argument){}
    注意:访问控制关键字必须为 public;必须有两个参数:对象访问的方法名称($name)、方法包含的参数($argument ==> 自动转换成数组)。

__callStatic()方法:当对象访问不存在的静态方法名称时,此方法自动调用。

  • 调用示例:public static function callStatic($name,$argument){}
    **注意:同
    call();此方法为静态方法(static)。**

这两种方法也被称为方法的重载(overloading)

  • 注意区分重写(overwrite)
  • 通过这两个方法,同一个方法的调用可以对应不同的方法的实现(同一个方法的静态调用、动态调用对应不同的方法实现)

总结

  • class: 类声明
  • new: 类实例化
  • public: 公开成员,随处可见
  • protected: 受保护成员,仅在当前类或子类中可见
  • private: 私有成员, 仅在当前类可见
  • spl_autoload_register(): 自动加载器
  • extends: 类的扩展
  • static: 声明类的静态成员
  • $this: 实例引用
  • self: 类的引用
  • trait: 类功能横向扩展
Correcting teacher:PHPzPHPz

Correction status:qualified

Teacher's comments:
Statement of this Website
The copyright of this blog article belongs to the blogger. Please specify the address when reprinting! If there is any infringement or violation of the law, please contact admin@php.cn Report processing!
All comments Speak rationally on civilized internet, please comply with News Comment Service Agreement
0 comments
Author's latest blog post