PHP的面向对象语法糖

语法糖在很多国内编程语言译著里指为方便实现某种设计提供的语法上的特性。
最近看了一本PHP设计模式书里介绍PHP为面向对象提供的语法特性的章节,为了做个小总结与注明和以前用的编程语言的区别,做个记录。介绍的是PHP5的特性,但不是很完整,书里没有介绍的不写在这。


1 PHP默认属性可见性为公有

2 PHP不支持多重继承,这个特点对之前用支持多重继承语言的程序员来说可能有点不习惯,最先想到使用对象的组合来替代以往的多重继承, 但多少有区别。

3  默认情况下对象的赋值是引用传递,如果打算用值传递需要用__clone()函数,这个概念类似C++中的重载=运算符。

4 在函数体中使用全局变量必须重新申明全局变量,否则即使用的变量名与全局变量一样也当成局部变量处理。PHP是弱类型脚本语言,允许使用变量前不事先声明,所以如果在局部作用域不经过任何声明使用与全局变量名字相同的变量不会报错,而是默默生成一个无关的新变量,刚开始写PHP程序没有详细阅读语法规则吃过这个亏- -!。感觉PHP的很多的“灵活性”会给自己挖下很多坑。。。

5  延迟静态绑定。static关键字除了声明静态方法与静态变量,在基类中使用static关键字来进行类别的访问,会等到程序运行时候才绑定相关的子类类型。

6 抽象类, 接口,与C++,java用法大同小异。

7 异常,
与C++,java用法大同小异。

8 final 限制继承与方法的覆盖。

9 拦截器 这个也是PHP提供的一种“灵活性”,能够包容客户端程序的一些错误。不过我认为有点玄,如果客户端程序员知道类中实现了拦截器有意调用还好,否则被包容的错误不一定是客户端程序员的本意。看来PHP不只给自己挖坑,也给代码用户挖了些坑。

10  __toString(),在print和echo语句中使用对象,会把对象作为字符串输出。

11 回调,匿名函数,闭包(闭包是以前没接触过的概念)

12 php命名空间,php5才有的特性,可以代替pear这样的把包名加入类名以避免命名冲突的方法。

13  __autoload拦截器,书78页。

14 PHP提供了一堆检测类和对象信息的函数。

15 反射API


你可能感兴趣的:(PHP的面向对象语法糖)