PHP之面向对象篇(3)

这次接着上一篇来讲;

面向对象的三大特征,之前已经讲了1个了,现在讲后2个:封装、多态

1.什么是封装?和pulic类似的访问修饰符分别有什么作用?

所谓封装,就是类可以把自己的数据和方法只让可信的类或者对象操作,对不可信的进行‘信息隐藏’(优点)。
* 把对象的属性和行为结合成一个独立的相同单位,并尽可能隐藏对象的内部细节。

封装是面向对象的特征之一,是对象和类概念的主要特性。

* 封装的原则在软件上的反应是:
要求使对象以外的部分不能随意存取对象的内部数据(属性),从而有效的避免了外部错误对它的‘交叉感染’。使软件错误能局部化,
大大减少了查错和排错的难度
* 封装实现的目的:
* 隐藏一个类的实现数据
* 防止对封装数据的未经授权的访问
* 有利于保证数据的完整性
* 便于修改,有利于增强代码的可维护性

PHP中有三种访问修饰符,分别是: 
public(公共的、默认) protected(受保护的) private(私有的)

它们可以分别用在类的属性和方法上(类的属性和方法统称为类的成员),用来修饰类成员的访问权限。 public(公共的、默认) 
在PHP5中如果类没有指定成员的访问修饰符,默认就是public的访问权限。

当类的成员被声明为public的访问修饰符时,该成员能被外部代码访问和操作。
private(私有的) 被定义为private的成员,对于类内部所有成员都可见,没有访问限制。对类外部不允许‘直接’访问。 
protected(受保护的) protected稍微有点复杂,被声明为protected的成员,只允许该类的子类进行访问。

举例:

讲完了封装,现在我们来看看多态:

* 所谓多态就是指一个类实例的相同方法在不同情形有不同表现形式。
* 多态机制使具有不同内部结构的对象可以共享相同的外部接口。

关于多态,就不得不说起 抽象和接口这两个概念了

2.什么是抽象?抽象的关键字是什么?

1)、抽象关键字 :abstract
抽象就是无法确切的说明,但又有一定的概念或者名称;也可以指不代表任何具体事物的一种概念。

* 抽象分为抽象类和抽象方法

2)、 关于抽象类

//抽象类的定义

* 使用抽象关键字修饰的类就叫抽象类
* 抽象类不一定需要有抽象方法,但是包含抽象方法的类一定是抽象类
* 抽象类不能够实例化

//抽象类的几个特点:
     1、不能被实例化,只能被继承
     2、继承的派生类当中要把所有抽象方法重载才能实例化

3)关于抽象方法

//抽象方法的定义
* 使用abstract修饰的函数方法叫抽象方法
* 抽象方法只有函数的声明部分,不包括实现部分,只要用分号代表出来
* 继承了带有抽象方法的类必须实现抽象方法的定义

//抽象方法的几个特点:
1、类中至少有一个抽象方法
2、抽象方法不允许有{}
3、抽象方法前面必须要加abstract

举例:

3.什么是接口?接口的关键字以及用法?

接口是一种特殊的抽象类,也可以看做是一个模型的规范。

PHP接口(interface)的特点 
1、在接口中的函数都是公共的抽象函数方法
2、接口的方法是不能添加关键字,可省略public
3、接口可以定义常量,但不能定义成员属性,常量的定义和用法和类中常量一样。 
4、接口通常都是一组功能的集合
5、接口也可以继承。
* 接口是抽象方法和静态常量定义的集合
* 实现了某个接口,必须实现该接口中的所有的抽象方法

接口与抽象类大致区别如下:

1. 一个子类如果 implements 一个接口,就必须实现接口中的所有方法(不管是否需要);如果是继承一个抽象类,只需要实现需要的方法即可。
2. 如果一个接口中定义的方法名改变了,那么所有实现此接口的子类需要同步更新方法名;而抽象类中如果方法名改变了,其子类对应的方法名
将不受影响,只是变成了一个新的方法而已(相对老的方法实现)。
3. 抽象类只能单继承,当一个子类需要实现的功能需要继承自多个父类时,就必须使用接口。

举例:

时间: 2024-10-15 09:11:31

PHP之面向对象篇(3)的相关文章

〔C# Note〕面向对象篇

面向对象编程的三大特点:封装,继承,多态. 一.封装 封装就是把数据组合在一起,形成一个对象.将类封装了以后,对外提供可访问的属性和方法,外部对象通过这些属性和方法访问此对象的信息. 类是支持对象封装的工具,对象则是封装的基本单元. 封装的好处: 1.良好的封装能够减少耦合. 2.类内部的实现可以自由地更改. 3.类具有清晰的对外接口. 封装性主要由访问修饰符来控制. 在这里有五个访问修饰符,public,private,protected,internal,protected internal

PHP之面向对象篇(2)

1.什么是构造函数? 构造函数( __construct() )是一种特殊的成员函数,与其他成员函数不同,不需要用户来调用它,而是在建立对象时自动执行. 在(PHP4.0)构造函数的名字必须与类名同名,而不能由用户任意命名,以便编译系统能识别它并把它作为构造函数处理.它不具有任何类型,不返回任何值. (PHP5.3.3在命名空间中,与类名同名的方法不再作为构造函数) 构造函数的功能是由用户定义的,用户根据初始化的要求设计函数体和函数参数.具有构造函数的类会在每次创建新对象时先调用此方法,所以非常

Javascript面向对象篇

1 表达式的概念 广义的概念:所有返回的一段代码块,都可以成为表达式.比如: var a=0; var a, b; a = 0;这个表达式的返回值为0; b = a;这个表达式的返回值为a; 赋值表达式的返回值为=右边的值; 2  面向对象的概念: 一种编程思想.核心:在解决任何问题的时候,首先试图去找到一个对象来帮助解决问题. 优点: 身份:调度者; 代码的灵活度高; 可维护性高; 可扩展性高; 缺点: 可能造成代码的复杂度提高 可读性相对不好 3  面向过程: 身份: 执行者 顺序: 一般情

[js笔记整理]面向对象篇

一.js面向对象基本概念 对象:内部封装.对外预留接口,一种通用的思想,面向对象分析: 1.特点 (1)抽象 (2)封装 (3)继承:多态继承.多重继承 2.对象组成 (1)属性: 任何对象都可以添加属性,(如右侧示例可弹出arr.a为12 var arr=[1,2,3];arr.a=12;alert(arr.a) 全局变量是window的属性, 1 <script> 2 window.a=12; 3 window.onload=function() 4 { 5 alert(a); 6 } 7

python——面向对象篇之异常和反射

内置函数isinstance和issubclass 1.1 isinstance用法: 1 isinstance(string,str) 判断第一个参数是否是第二个参数的子集,例如: 1 print isinstance("test",str) #判断test是否是字符串类型 2 3 C:\Python27\python.exe D:/python/s11/8day/反射/test.py 4 5 True 6 7 8 print isinstance(123,int) #判断123是否

PHP之面向对象篇

1.面向对象到底是什么?  通常我们把一个类的实例化叫对象,这种对象严格的说应该是面向对象的编程实现(OOP)中的对象,面向对象的编程.对象的定义是人们要进行研究的任何事物,从最简单的整数到复杂的飞机等均可看作对象,它不仅能表示具体的事物,还能表示抽象的规则.计划或事件. 在这里要提到一个结构化编程: 结构化程序设计方法主张按功能来分析系统需求, 原则有 自顶向下, 逐步求精, 模块化等. 笼统来讲,就是建立对象模型,将问题域化为不同的对象进行处理. 2.什么是类和对象? 类是用来描述一个对象,

js面向对象篇(一)

Javascript是一种基于对象(object-based)的语言,你遇到的所有东西几乎都是对象.但是,它又不是一种真正的面向对象编程(OOP)语言,因为它的语法中没有class(类). ----摘自阮一峰老师的博客 当然现在的es6中已经有了class,去声明一个类,让js看上去更像是一个面对对象编程的语言 那么问题来了什么是面向对象呢?其实js是有很多种写法的,我们平时一般写的程序都是面向过程式的,就像这样 var a = 1; function show(opt){ alert(opt)

面向对象篇(四)

function CreatePerson(name){ this.name = name; this.showName = function(){ alert(this.name); } } var p1 =new CreatePerson('张三'); p1.showName(); //张三 var p2 =new CreatePerson('李四'); p2.showName(); //李四 上面的代码,看似没有什么问题,我们来看一个问题 console.log(p1.showName =

面向对象篇

1.面向过程与面向对象的简介 面向对象(Object Oriented,OO)是软件开发方法.面向对象的概念和应用已超越了程序设计和软件开发,扩展到如数据库系统.交互式界面.应用结构.应用平台. 分布式系统.网络管理结构.CAD技术.人工智能等领域.面向对象是一种对现实世界理解和抽象的方法,是计算机编程技术 [1]  发展到一定阶段后的产物. 1.1 面向过程 面向过程的程序设计:所谓的面向过程,指的是解决问题的步骤,先做什么再做什么, 而面向过程设计就好比,精心设计好一条流水线,是一种机械式的