java 与 php 区别或异同(整理、整合)

阅读数: 751 2018年07月18日

https://blog.csdn.net/fenglailea/article/details/52718827


------来自知乎-----

面向对象编程(OOP)引入了相当多的特性,使编程变得更加复杂.

封装,继承,多态是OOP的三要素,这些是过程式中的函数所没有的.

具体体现在:

1.封装: class/interface/public/protected/private

2.继承: extends/implements

3.多态: 方法重写/方法重载


新增的class和interface加入了新的变量作用域,即类和接口里代码块是函数所没有的作用域.

在这个作用域里,可以定义变量和函数这些类和接口的成员,并且支持使用public/protected/private关键字对这些成员进行访问控制.比如public表示允许外部访问,protected表示允许类及其子类访问,private表示只允许所在类内部访问.


而且OOP还引入了方法重写和方法重载这些多态特性,即:

方法重写:参数列表相同,方法体不同.

方法重载:参数列表不同,方法体不同.

方法重写依赖继承,是子类的方法覆盖父类的方法,要求方法名和参数列表相同.

方法重载不依赖继承,是同一个类中的两个或两个以上的同名方法,参数列表不同.

需要注意的是继承并重写的方法只能维持或放大访问权限,不能缩小.

比如父类protected方法在子类重载为public是可行的.

在PHP中,因为不允许存在多个同名方法,所以不支持C++/Java那样的方法重载.

但PHP提供了魔术方法(__call,__callStatic)用于间接实现方法重载.

PHP中方法重写并不要求参数相同.

PHP不支持多重继承(继承多个父类),但可以实现多个接口,也可以用trait特性间接支持多重继承.


有些人认为继承会增加子类和父类的耦合,所以反对继承,甚至有些新的编程语言如Go等,直接不支持继承,而是使用组合来取代继承.比如依赖注入,本质上也是一种组合的思想,用于实现解耦.PHP中可以final修饰一个类,禁止这个类被继承.


你看,这么多特性,是不是增加了编程的复杂性.

所以说,一个开发者,如果你过程式编程都用不好,那肯定也玩不装OOP.

如果连函数都搞不明白,那也肯定搞不懂类.


参考资料
https://www.zhihu.com/question/68652979
https://blog.csdn.net/fenglailea/article/details/52718827
phpriji.cn | 网站地图 | 沪ICP备17015433号-1