关闭

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

标签: php核心技术与最佳实践
381人阅读 评论(0) 收藏 举报
分类:

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
0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:30885次
    • 积分:846
    • 等级:
    • 排名:千里之外
    • 原创:56篇
    • 转载:2篇
    • 译文:0篇
    • 评论:13条
    最新评论