2010-08-27 20 views
9

he encontrado este casodiferencias sutiles entre oop java y php

** ** ejemplo php

abstract class class1{ 
    function test(){} 
} 


abstract class class2 extends class1{ 
    abstract function test(); 
} 

Este concepto oop funciona en Java, en PHP no lo hace. (Cannot make non abstract method class1::test() abstract in class class2)

¿Qué otras diferencias sutiles hay entre Java y PHP oop?

+1

'function' palabra clave en java? –

+0

void ... en java ... pero el mismo principio – danidacar

+9

Si esta es una compilación de tales diferencias, debe hacer esta wiki de la comunidad, ya que no hay una respuesta final a su "pregunta". – PhiLho

Respuesta

12

Java y PHP (incluso cuando se utiliza OO PHP) tienen una gran variedad de diferencias.

A pocos pensamientos de la parte superior de mi cabeza: se escribe fuertemente-

  1. Java, PHP no es, aunque hay un alcance limitado para el tipo-dando a entender en PHP. Esto hace una gran diferencia en las firmas de métodos. En PHP, sólo se puede obligar a los parámetros del método a ser de una cierta clase o interfaz o una matriz:

    public function myMethod(SomeClass $foo, array $bar){}

    ... pero no se puede sugerencia del tipo de primitivas! Entonces public function myMethod(int $foo, boolean $bar){} no es válido y generará un error de análisis.

    Además, cualquier parámetro que ha sido de tipo insinuado no se puede pasar como nullmenos null se da como un valor por defecto. Así que para permitir null s, es necesario utilizar:

    public function myMethod(SomeClass $foo = null)

  2. PHP no requiere (o incluso el apoyo) que especifica el tipo de retorno de una función.

  3. Las clases PHP no tienen campos final, aunque lo que sería un campo static final en Java es const en PHP. EDITAR: Un const en PHP es más limitado que un static final en Java, ya que este último puede ser una matriz o instancia de objeto, mientras que el primero debe ser un valor constante (número o una cadena, esencialmente).

  4. "Sobrecarga" en PHP no significa lo mismo que en Java. En Java, significa especificación de varios métodos con el mismo nombre, pero con un conjunto diferente de parámetros:

    public void myMethod(int foo){}; public void myMethod(float foo){};

    En PHP, se refiere a la creación dinámica de propiedades y métodos utilizando el __get(), __set() y __callStatic() métodos "mágicos". Consulte el PHP manual para obtener una descripción de su uso. La sobrecarga de métodos estilo Java es imposible en PHP y un intento de volver a declarar un método (con o sin un conjunto diferente de parámetros) fallará.

  5. puede ser obvio para algunos, pero en PHP que utilice :: acceder a métodos estáticos y propiedades y -> acceder a las instancias, pero en Java . se utiliza para ambos.

  6. PHP no tiene paquetes, pero tiene espacios de nombres.

  7. A partir de PHP5, los constructores en PHP no deben ser métodos con un nombre que coincida con la clase, como en Java, pero el método mágico __construct() debe declararse en su lugar, aunque el estilo PHP4 es compatible con compatibilidad retroactiva . Además, PHP tiene un método destructor llamado __destruct().

  8. En Java, todas las clases heredan de Object, pero no existe dicha superclase genérica en PHP.

  9. Incluso cuando se maximiza la cantidad de OOP en un script PHP, todavía se basa en un flujo de procedimiento; no hay un punto de entrada de nivel de clase como en Java (es decir, public static void main(String[] args) o public void init() para los applets).

+0

'const' y' final' son semánticamente diferentes de todos modos. – BoltClock

+0

Sí lo son. Mi punto es que lo más cercano que se puede llegar a la 'final estática' de Java en PHP es una 'const' y que PHP no tiene una equivalencia 'final' de nivel de propiedad. – megaflop

+0

puntos 1 y 2 no son relevantes después de la versión php 7. – TermiT

0

Major 3 cosas que siempre recordará por OO PHP no tiene:

1-PHP no tiene ninguna función principal de las clases.


2-Al igual que C++ que tiene declarar un constructor y el destructor es decir __construct()


3-No se puede declarar final (constante) de las variables, pero a métodos y clases para que se no puede ser anulado y heredado repsectivley.


4- (Bonificación) Lo peor es que la estructura de datos no es OO. Usas matrices de todas las maneras. Sin soporte para colecciones

Cuestiones relacionadas