java和php之间细微的oop差异
我找到了这个箱子 **php示例**java和php之间细微的oop差异,java,php,oop,Java,Php,Oop,我找到了这个箱子 **php示例** abstract class class1{ function test(){} } abstract class class2 extends class1{ abstract function test(); } 这个oop概念在Java中工作,在PHP中则不工作。(无法使非抽象方法class1::test()在类class2中抽象) Java和PHP oop之间还有什么细微的差别呢?Java和PHP(即使使用OO
abstract class class1{
function test(){}
}
abstract class class2 extends class1{
abstract function test();
}
这个oop概念在Java中工作,在PHP中则不工作。(无法使非抽象方法class1::test()在类class2中抽象)
Java和PHP oop之间还有什么细微的差别呢?Java和PHP(即使使用OO-PHP)也有很多差别
我脑子里只想了几句:
Java是强类型的,PHP不是,尽管PHP中的类型暗示范围有限。这对方法签名产生了巨大的影响。在PHP中,只能强制方法参数为某个类、接口或数组:
公共函数myMethod(SomeClass$foo,array$bar){}
…但不能为基本体键入提示!因此,公共函数myMethod(int$foo,boolean$bar){}
无效,将抛出解析错误
此外,任何类型暗示的参数都不能作为null
传递,除非null
作为默认值给出。因此,要允许null
s,您需要使用:
公共函数myMethod(SomeClass$foo=null)
PHP不需要(甚至不支持)指定函数的返回类型
PHP类没有final
字段,尽管Java中的静态final
字段在PHP中是const
。编辑:PHP中的const
比Java中的static final
更有限,因为后者可以是数组或对象实例,而前者必须是常量(本质上是数字或字符串)
PHP中的“重载”与Java中的“重载”含义不同。在Java中,这意味着使用不同的参数集指定多个同名方法:
publicsvoidmymethod(intfoo){};公共void myMethod(float foo){}代码>
在PHP中,它指的是使用\uuuu get()
、\uuu set()
和\uuu callStatic()
“magic”方法动态创建属性和方法。有关其使用的说明,请参见。Java风格的方法重载在PHP中是不可能的,尝试重新声明方法(使用或不使用不同的参数集)将失败
对某些人来说可能很明显,但在PHP中,您使用:
访问静态方法和属性,使用->
访问实例方法和属性,但在Java中,这两种方法都使用
PHP没有包,但它有名称空间
从PHP5开始,PHP中的构造函数不应该是名称与类匹配的方法,就像在Java中一样,但是应该声明神奇的方法\uu construct()
,尽管PHP4样式支持向后兼容。此外,PHP还有一个名为\uu destruct()
的析构函数方法
在Java中,所有类都继承自对象
,但PHP中没有这样的通用超类
即使在最大化PHP脚本中的OOP量时,它仍然依赖于过程流;Java中没有类似的类级入口点(例如,publicstaticvoidmain(String[]args)
或publicsvoidinit()
,适用于小程序)
无效的用java。。但同样的oop原则如果这是一个关于这些差异的汇编,你应该把这个社区变成维基,因为你的“问题”没有最终的答案。我认为讨论“松树和枞树的区别是什么”这样的问题没有意义。它们只是不同而已。@FractalizeR:我想说,如果一个用户是学习PHP的,并且来自Java背景(反之亦然),那么它肯定是有意义的——它是一个gotchas的编译。“这里的工作方式不太一样。”糟糕的是,没有人在添加示例。const
和final
在语义上是不同的。是的,它们是不同的。我的观点是,在PHP中最接近Java的static final
的是const
,PHP没有属性级别final
等价。PHP7发布后,第1点和第2点不相关。