一)面向对象思想的核心概念

原创 2015年07月07日 20:02:39

1.1 面向对象的行与本

  • 把一个对象存起来,称为序列化,序列化和反序列化都要包含类的名称。
  • 序列化只会存储属性,方法通过存储的类名去调用,且公用公共的代码空间;
  • php类的实现在底层是通过“属性数组+方法数组”来实现的;
  • 对象和数组的却别在于对象多了一个指向类的指针;
  • 当对象由标量强制转换成的object,则没有一个类与之对应,php中的“孤儿”类stdClass会收留这个对象;

1.2 魔术方法的应用

  • 类似于额外封装的操作,例如construct方法在对象创建之前进行一些操作;get方法会返回类的私有对象;当调用一个不存在的方法时,会调用call;等等。
  • 魔术方法使动态创建变成了可能;

1.3 继承与多态

1.3.1 类的组合与继承

  • 继承是一种“是”、“像”的关系;组合是一种“需要”、“包含”的关系。
  • 低耦合是指模块间的关系尽量少,各模块尽量独立的存在。考虑到这一点,组合是要优于继承的。
  • 继承主要问题有:破坏封装性;紧耦合;继承扩展复杂;不恰当的继承可能违背自然界的规律。
  • 底层代码多用组合,顶层/业务层代码多用继承。组合效率高,继承灵活。可以专门抽象出特殊的类来供继承。

1.3.4 各种语言中的多态

  • 同一类对象收到不同的消息,做出不同的反应,返回不同的结果。多种状态之意。
  • php是弱类型的,没有对象类型转换机制。所以不存在子类上升至父类,在调用时动态改变其指向。
  • 多态指同一类对象在运行时的具体化;
  • php是弱类型语言,实现多态更简单、更灵活;
  • 类型转换不是多态;
  • 多态的本质就是if。。。else,只不过实现的层级不同。

1.4面向接口编程

1.4.1接口的作用

接口提供一种协议,实现的人需要遵守,调用的人也需要遵守。

1.4.2php接口的思考

  • php用到接口的地方不多,可以淡化为设计文档,起到一个团队基本契约的作用。实现一个接口,即可知道这个类可调用的方法,记为接口的真谛!
  • 对php中实现接口的类,以接口的身份去调用时,只会关心是否实现对应的方法,不会关心该方法是否定义在接口中,即不关心接口语义是否正确。这就是php中接口中最大的软肋。

1.5反射

1.5.1反射API

对象的自省能力,谓之反射

getProperties();getName();get_class();get_class_vars();get_class_methods();

1.5.2反射有什么用

  • 生成文档
  • 动态代理(AOP)

1.6 异常和错误处理

1.6.1如何使用异常处理机制

  • 在php里,任何自身错误都会触发一个错误,而不是抛出异常;
  • 捕获异常必须要程序判断,手动抛出异常。例如if(a=0) throw new emailException();
  • 在php里,异常通常用于:对程序的悲观预测;程序的需要和对业务的关注;语言健壮性的要求。
  • 异常有两种捕获方式:异常发生时立刻捕获;分散抛异常,集中捕获;
  • 对于重要的业务,应该发生异常就立即捕获,并作出相应的补救措施,例如删除文件、回滚数据库等等;对于不是很重要的异常,可以集中处理是的代码更加紧密,逻辑更加专一。

1.6.2 PHP中的异常机制

php中的异常机制准确来说是不健全的,因为无法自动抛出异常,必须手动去判断并抛出,原则上这就是已知的东西,不可以称作异常。
有没有什么机制可以使得php自动抛出异常呢?有的,就是结合php中的错误处理。

1.6.3 php中的错误级别

  • 错误级别:deprecated;notice;warning;fatal error;parse error;
  • error_reporting=E_ALL|E_STRICT
  • display_errors=ON
  • @错误抑制符

1.6.4 php中错误处理机制

  • set_error_handler(error_function,error_types)
  • error_function必须包含四个变量: (errno,errstr,errfile,errline)
  • 某些等级的错误自定义处理函数无法接管,必须以原有方式输出。例如E_ERROR、E_PARSE等;
  • set_error_handler,restore使得接管失效;
  • set_error_handler会使@失效;
  • fatal错误虽然无法捕捉,但是还是可以做一些事的。利用register_shutdown _function,在php终止或处罚die时,回光返照下;
  • 错误抛出:trigger_error

面向对象思想及核心

1,面向对象的核心思想 面向对象简介: 从现实世界中客观存在的事物(即对象)出发来构造软件系统,并在系统构造中尽可能运用人类的自然思维方式,强调直接以问题域(现实世界)中的事物为中心来思考问题,认识问...
  • wofangfan
  • wofangfan
  • 2010年10月07日 16:31
  • 6344

C#面向对象--继承

C#技术中,面向对象很重要,包括三个成员,分别是:封装、继承、多态。 封装性,不多解释,更多的在与集成化,直接调用,对Asp.Net开发者来说,目前让我自己直接写一个大的封装的接触不多,如,JS的完美...
  • u010716604
  • u010716604
  • 2015年12月10日 10:41
  • 254

面向对象核心思想和概念

问题领域:软件系统所模拟的真实世界中的系统。  对象:对问题领域中事物的抽象。  属性:对象的特征,其值称为状态。  行为:又称为对象的方法,包括具有的功能及具体的实现。  *...
  • u014029057
  • u014029057
  • 2014年03月10日 22:44
  • 258

Spring中AOP的核心概念

Spring是J2EE开发中非常流行的框架,他最重要的两大基本功能是提供IoC容器和AOP概念的实现。这里介绍一下AOP,它的全名为Aspect-Oriented Programming,可翻译为面向...
  • zsh2050
  • zsh2050
  • 2015年03月21日 21:56
  • 1061

java的核心概念:interface

接口与类属于同一层次,实际上,接口是一种特殊的抽象类。  如:    interface IA{ }  public interface: 公开接口  与类相似,一个文件只能有一个public接口...
  • Kevin_3
  • Kevin_3
  • 2016年09月07日 20:52
  • 272

spring核心概念

IOC(Inversion of Control)——控制反转         首先介绍IoC(Inversion of Control,控制反转)。这是spring的核心,贯穿始终。所谓I...
  • basycia
  • basycia
  • 2016年07月12日 21:26
  • 1499

Netty核心概念

转载自:http://blog.csdn.net/abc_key/article/details/37672187         一个Netty程序开始于Bootstrap类,Bootstra...
  • zero__007
  • zero__007
  • 2016年05月02日 09:24
  • 1142

Spring核心概念总结

Spring核心概念总结
  • happyljw
  • happyljw
  • 2016年08月27日 16:47
  • 1913

ElasticSearch核心概念

ElasticSearch核心概念   1)索引(Index)   ElaticSearch将数据存放在一个或多个索引当中。一个索引相当于一个数据库,里面存放用户文档数据。在底层,Elasti...
  • changong28
  • changong28
  • 2014年07月30日 16:31
  • 1356

docker 核心概念整理

Docker核心概念整理docker本机上的本地存储docker images命令显示的内容都是本机上存在的资源,那我这些资源到底会在哪里呢,那我们来看看/var/lib/docker这个文件夹下的内...
  • wanglei_storage
  • wanglei_storage
  • 2015年09月28日 16:13
  • 714
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:一)面向对象思想的核心概念
举报原因:
原因补充:

(最多只允许输入30个字)