再次梳理一下面向对象编程的要点。

此文是以php为例,但思想是通用的。

总结的PHP面向对象编程笔记

对象的基本概念

对象的基本构成

对象包含两部分

一、对象的组成元素

是对象的数据模型,用于描述对象的数据。

又被称为对象的属性,或对象的成员变量。

二、对象的行为

是对象的行为模型,用于描述对象能够做什么。

又被称为对象的方法。

对象的特点

1 每个对象都是独一无二的

2 对象是一个特定事物,他的职能是完成特定功能

3 对象是可以重复利用的

面向对象的基本概念

面向对象就是在编程的时候数据结构形式都通过对象的结构(属性,方法)进行存储。

面向对象的实质

面向对象就是把生活中要解决的问题都通过对象的方式(属性,方法)进行存储。

对象和对象之间的互动是通过方法的调用(方法)完成互动。

面对对象的原则

对象内部是高内聚的

对象对外是低耦合的

PHP面向对象的基本实践

通过关键词 class

物以类聚,把具有相同特性的对象归到一个类中。

类定义了这些对象有相同的属性,方法。

类的对象称为类的一个实例(instance)

类的属性方法统称为类的成员。

类的实例化

类的实例化就是通过类定义创建类的一个对象。

通过关键词 new

构造函数

__construct()

构造函数,在对象被实例化时自动调用,都会自动执行一次

析构函数

__destruct()

在程序结束的时候,自动调用

析构函数通常用来清理程序使用的资源

对象的引用

面向对象的高级实践

继承

继承的好处

1 父类定义的类成员不用在子类中重复定义,节约了编程的时间

2 .同一个父类的子类拥有相同的父类定义的类成员,因此外部代码调用他们的时候可以一视同仁

3 子类可以调整或重写父类的类成员。

在子类的对象上可以直接访问父类中的方法和属性

父类中的属性,可以通过$this来访问

在PHP中可以用extends关键字来表示类的继承,后面跟父类的类名。
PHP中extends后面只能跟一个累的类名,这就是php的单继承原则

访问控制

public (公有的):类中的成员将没有访问限制,所有的外部成员都可以访问(读和写)这个类成员(包括成员属性和成员方法)。如果类的成员没有指定成员访问修饰符,将被视为 public 。

protected (受保护的):被定义为 protected 的成员不能被该类的外部代码访问,但该类的子类具有访问权限。

private (私有的):被定义为 private 的成员,允许同一个类里的所有成员访问,但对于该类的外部代码和子类都不允许访问。

static(静态)关键字

静态属性定义时在访问控制关键字后面添加static关键字即可
静态方法定义同上

在类定义中使用静态成员的时候,在self关键字后面跟着::操作符,即可。注意,在访问静态成员的时候,::后面需要跟$符号
在类定义外部访问静态属性,我们可以用类名加::操作符的方法来访问类的静态成员。

使用parent关键字就能访问父类的静态成员
1.静态属性用于保存类的公有数据
2.静态方法里面只能访问静态属性
3.静态成员不需要实例化对象就能访问
4.内部可以通过self或者static关键字访问自身静态成员
5.可以通过parent关键字访问父类的静态成员
6.可以通过类的名称在类定义外部访问静态成员

Final关键字(PHP5)

final -- 用于类、方法前。(是最终的效果)

final类 -- 不可被继承。

final方法 -- 不可被覆盖。

数据访问

1.parent关键字可以调用父类中被子类重写了的方法
2 self关键字可以用于访问类自身的成员方法,也可以用于访问自身的静态成员和类常量;不能用于访问类自身的属性;使用常量的时候不需要在常量名称前面添加$符号
3.static关键字用于访问类自身定义的静态成员,防伪静态属性时需要在属性面前添加$符号

对象接口

接口是一种标准,简单说,比如有个说话的函数/方法,有些人用say(),有些人用shuo(),有些人用其他的,这可不行,这时候定义一个接口,所有人都得用同一个写法

接口:
1.方法不具体实现
2.定义接口为interface关键字
3.类使用接口为implements 关键字
4.接口可以继承接口,用extends关键字

5.接口不能被实例

可以用instanceof 判断某个对象是否实现了某个接口

类的方法必须有具体实现,接口的方法必须为空。

多态

因为接口的实现方法可以有很多,所以对接口里面定义的方法的具体实现也是多种多样,这就是多态。

抽象类

抽象类是介于类和接口之间的一种形态,有一部分类是没有实现的,有一部分类是已经实现的

abstract关键字定义抽象类

在抽象方法添加abstract关键字可以表明这个方法是抽象方法,不需要具体实现

抽象类中可以包含普通的方法

继承抽象类用extends关键字

继承抽象类的子类需要实现抽象类中的抽象方法

PHP面向对象的特殊实践

只有php有

魔术方法

__tostring 当对象被当做字符串使用时自动调用
__invoke 当对象被当做方法是使用时自动调用

PHP面向对象编程 对象的基本概念 PHP面向对象的基本实践 PHP面向对象的高级实践 PHP面向对象的特殊实践的更多相关文章

  1. java类(Class)的概念;对象的概念,声明类的属性 和方法,局部变量和成员变量,面向对象编程思维,抽象的概念

    类(Class)的概念 类是对一组具有相同特征和行为的对象的抽象描述. 理解: [1] 类包含了两个要素:特性和行为 => 同一类事物具有相同的特征和行为. [2] 类是一个群体性概念.例如:网 ...

  2. python 中面向对象编程的几个概念

    Python super() 函数 super() 函数是用于调用父类(超类)的一个方法. super 是用来解决多重继承问题的,直接用类名调用父类方法在使用单继承的时候没问题,但是如果使用多继承,会 ...

  3. python面向对象编程对象和实例的理解

    给你一个眼神,自己体会

  4. 洗礼灵魂,修炼python(31)--面向对象编程(1)—面向对象,对象,类的了解

    面向对象 1.什么是面向对象 (图片来自网络) 哈哈,当然不是图中的意思. 1).面向对象(Object Oriented,OO)是软件开发方法.利用各大搜索引擎得到的解释都太官方,完全看不懂啥意思对 ...

  5. python面向对象编程(上)

    面向对象编程(OOP,Object Oriented Programming)是每一个高级编程语言都支持的编程方法,比如JAVA/C++/C#等等.学习面向对象编程是每一个程序员都绕不开的重点内容. ...

  6. perl5 第十三章 Perl的面向对象编程

    第十三章 Perl的面向对象编程 by flamephoenix 一.模块简介二.Perl中的类三.创建类四.构造函数 实例变量 五.方法六.方法的输出七.方法的调用八.重载九.析构函数十.继承十一. ...

  7. S.O.L.I.D 是面向对象设计(OOD)和面向对象编程(OOP)中的几个重要编码原则

    注:以下图片均来自<如何向妻子解释OOD>译文链接:http://www.cnblogs.com/niyw/archive/2011/01/25/1940603.html      < ...

  8. 7. Scala面向对象编程(中级部分)

    7.1 包 7.1.1 看一个应用场景 现在有两个程序员共同开发一个项目,程序员xiaoming希望定义一个类取名Dog,程序员xiaohong也想定一个类也叫Dog,两个程序员还为此吵了起来,该怎么 ...

  9. C# 篇基础知识3——面向对象编程

    面向过程的结构化编程,例如1972年美国贝尔研究所推出的C语言,这类编程方式重点放在在定函数上,将较大任务分解成若干小任务,每个小任务由函数实现,分而治之的思想,然而随着软件规模的不断扩张,软件的复杂 ...

随机推荐

  1. 怀念的东西:Pirka咖啡,芬兰的味道

    怀念的东西:Pirka咖啡,芬兰的味道 前一段收到了小牛同学从芬兰托人寄来的咖啡.拿着提货单的时候,我满脑子问号.这寄货人是谁的呢,我完全没有印象.而且写的是食品.我又想起了最近报道的诈骗消息,给你寄 ...

  2. Java NIO之内存映射文件——MappedByteBuffer

    大多数操作系统都可以利用虚拟内存实现将一个文件或者文件的一部分"映射"到内存中.然后,这个文件就可以当作是内存数组来访问,这比传统的文件要快得多. 内存映射文件的一个关键优势是操作 ...

  3. 使用 IDEA 创建 Maven Web 项目 (四)- 让 WEB 应用跑起来

    在 IDEA 中配置 Tomcat 单击 IDEA 工具栏上的 Edit Configurations... (在一个下拉框中),弹出 Run/Debug Configurations 对话框. 单击 ...

  4. CodeForces 384C Milking cows

    水题. 对于两个$0$,肯定是先删去后面的$0$,再删去前面的$0$. 对于两个$1$,肯定是先删去前面的$1$,再删去后面的$1$. 对于一个$0$和一个$1$,无论先删哪一个,对答案做出的贡献都是 ...

  5. How to use dt.Rows.Cast<System.Data.DataRow>().Take(n)

    参考文章:http://stackoverflow.com/questions/2787458/how-to-select-top-n-rows-from-a-datatable-dataview-i ...

  6. SVN版本控制的使用

    下面说一说本人对SVN工具使用的理解: SVN就是一个工具,一个用来便于多人(或说团队)开发代码的版本控制工具,我们可以用它很好的把多个程序员开发出来的代码统一起来,并且保证在这个工程中不出现任何差错 ...

  7. Linux的一些简单命令(四)-用户和组账户管理

    linux操作系统是一个多用户操作系统,它允许多用户同时登录到系统上并使用资源.系统会根据账户来区分每个用户的文件,进程,任务和工作环境,使得每个用户工作都不受干扰 1.保存用户信息的文件:/etc/ ...

  8. Number Sequence (HDU 1711)

    Number Sequence Time Limit: 10000/5000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) ...

  9. 第一百二十五节,JavaScript,XML

    JavaScript,XML 学习要点: 1.IE中的XML 2.DOM2中的XML 3.跨浏览器处理XML 随着互联网的发展,Web应用程序的丰富,开发人员越来越希望能够使用客户端来操作XML技术. ...

  10. 使用高通SDK开发AR应用

    具体AR是什么效果我这里就不说了,直接上过程: 1.去官网注册一个帐号https://developer.vuforia.com 2.下载SDK for Unity,并导入Unity 3.点击Deve ...