我发现了这个案子
**php示例**
abstract class class1{
function test(){}
}
abstract class class2 extends class1{
abstract function test();
}
Run Code Online (Sandbox Code Playgroud)
这个oop概念在Java中运行,在PHP中它没有.(Cannot make non abstract method class1::test() abstract in class class2)
Java和PHP oop之间还有哪些细微差别?
meg*_*lop 13
Java和PHP(即使使用OO PHP)也有很多不同之处.
我只想了几个想法:
Java是强类型的,PHP不是,尽管PHP中的类型提示的范围有限.这对方法签名产生了巨大的影响.在PHP中,您只能强制方法参数属于某个类或接口或数组:
public function myMethod(SomeClass $foo, array $bar){}
...但你不能输入基元的提示!因此public function myMethod(int $foo, boolean $bar){}无效并将抛出一个解析错误.
此外,null 除非null作为默认值给出,否则任何已经类型提示的参数都不能传递.所以要允许nulls,你需要使用:
public function myMethod(SomeClass $foo = null)
PHP不需要(甚至支持)指定函数的返回类型.
PHP类没有final字段,尽管static finalJava中的字段是constPHP中的字段.编辑:constPHP中的A 比static finalJava 更受限制,因为后者可以是数组或对象实例,而前者必须是常量值(本质上是数字或字符串).
PHP中的"重载"并不意味着与Java中的相同.在Java中,它意味着指定多个具有相同名称但具有不同参数集的方法:
public void myMethod(int foo){}; public void myMethod(float foo){};
在PHP中,它指的是动态创建的属性和使用方法__get(),__set()并__callStatic()"神奇"的方法.有关其用法的说明,请参阅PHP手册.在PHP中不可能进行Java样式的方法重载,并且尝试重新声明方法(使用或不使用不同的参数集)将会失败.
对某些人来说可能是显而易见的,但在PHP中,您使用::访问静态方法和属性以及->访问实例方法,但在Java .中使用它们.
PHP没有包,但它确实有名称空间.
从PHP5开始,PHP中的构造函数不应该是具有与类匹配的名称的方法,就像在Java中一样,但是__construct()应该声明魔术方法,尽管支持PHP4样式以实现向后兼容.此外,PHP有一个名为的析构函数方法__destruct().
在Java中,所有类都继承自Object,但PHP中没有这样的通用超类.
即使最大化PHP脚本中的OOP数量,它仍然依赖于程序流程; Java中没有类级别的入口点(即,public static void main(String[] args)或者public void init()用于applet).