Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/webpack/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
java和php之间细微的oop差异_Java_Php_Oop - Fatal编程技术网

java和php之间细微的oop差异

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

我找到了这个箱子

**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-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点不相关。