not migrar llamar juntos java_require funcion fcgiconnectexception ejecutar desde datos could conectar con codigo java php

migrar - php y javascript



¿Cuáles son las diferencias entre PHP y Java? (4)

¿Cuáles son las principales diferencias entre PHP y Java que alguien con dominio en PHP pero que aprende sobre Java debería conocer?

Editar: Me refiero a las diferencias en la sintaxis de los idiomas, es decir, sus tipos de datos, cómo manejan matrices y variables de referencia, y así sucesivamente :)


  • podría usar la herramienta JavaDoc para autogenerar documentación en su software. Pero necesita escribir comentarios de manera específica.

  • no puede ejecutar PHP en teléfonos móviles :) Hay muchos entornos y plataformas de tiempo de ejecución. Esto significa que necesita pensar de antemano qué bibliotecas podrían faltar o qué limitaciones podría haber (tamaño de pantalla, límites de memoria, delimitador de ruta de archivo "/" o "/", por ejemplo).


No es una lista exhaustiva, y soy un desarrollador de PHP que hace un tiempo recorrí Java Caveat Emptor.

Cada variable en Java necesita ser antepuesta con un tipo de datos. Esto incluye tipos primitivos como boolean, int, double y char, así como tipos de datos Object, como ArrayList, String y sus propios objetos

int foo = 36; char bar = ''b''; double baz = 3.14; String speech = "We hold these truths ..."; MyWidget widget = new MyWidget(foo,bar,baz,speech);

Cada variable solo puede contener un valor de su tipo. Usando las declaraciones anteriores, lo siguiente no es válido

foo = baz

La igualdad en los objetos (no en los tipos primitivos) verifica la identidad del objeto. Entonces, lo siguiente, de manera no intuitiva, imprime falso. Las cadenas tienen un método de igualdad para manejar esto.

//see comments for more information on what happens //if you use this syntax to declare your strings //String v1 = "foo"; //String v2 = "foo"; String v1 = new String("foo"); String v2 = new String("foo"); if(v1 == v2){ pritnln("True"); } else{ println("False"); }

Las matrices son tus arrays en C clásicos. Solo puede contener variables de un tipo particular, necesita ser creado con una longitud fija

Para evitar esto, hay una serie de Objetos de colección, uno de los cuales se llama ArrayList que actuará más como matrices de PHP (aunque el negocio de mantener un tipo sigue siendo cierto). No obtienes la matriz como la sintaxis, toda la manipulación se realiza a través de métodos

//creates an array list of strings ArrayList<String> myArr = new ArrayList<String>(); myArr.add("My First Item");

ArrayLists todavía tiene claves numéricas. Hay otra colección llamada HashMap que le dará un diccionario (o matriz asociativa, si fue a la escuela en los 90) como objeto.

ArrayLists y otras colecciones se implementan con algo llamado genéricos (el <String>). No soy un programador de Java, así que todo lo que entiendo sobre Genéricos es que describen el tipo de cosas en las que operará un Objeto. Hay mucho más pasando allí.

Java no tiene punteros. Sin embargo, todos los objetos son en realidad referencias, similares a PHP 5, disímiles a PHP 4. No creo que Java tenga el (depreciado) PHP & reference & syntax.

Todos los parámetros del método se pasan por valor en Java. Sin embargo, dado que todos los objetos son en realidad referencias, está pasando el valor de la referencia cuando pasa un objeto. Esto significa que si manipulas un objeto pasado a un método, las manipulaciones se mantendrán. Sin embargo, si intentas algo como esto, no obtendrás el resultado esperado

public void swapThatWontWork(String v1, String v2) { String temp = var1; var1 = var2; var2 = temp; }

Es un momento tan bueno como cualquiera para mencionar que los métodos deben tener especificado su tipo de devolución, y sucederán cosas malas si un método devuelve algo que no debería. El siguiente método devuelve un int

public int fooBarBax(int v1){ }

Si un método arroja una excepción, debe declararlo como tal, o el compilador no tendrá nada que ver con eso.

public int fooBarBax(int v1) throws SomeException,AnotherException{ ... }

Esto puede ser complicado si está utilizando objetos que no ha escrito en su método que podrían arrojar una excepción.

El punto de entrada del código principal en Java será un método para una clase, a diferencia del punto de entrada global principal de PHP

Los nombres de variables en Java no comienzan con un sigil ($), aunque creo que sí pueden hacerlo si quieres que

Los nombres de clases en Java son sensibles a mayúsculas y minúsculas

Las cadenas no son mutables en Java, por lo que la concatenación puede ser una operación costosa.

La biblioteca de la clase Java proporciona un mecanismo para implementar subprocesos. PHP no tiene tal mecanismo.

Los métodos PHP (y funciones) le permiten tener parámetros opcionales. En java, necesita definir un método separado para cada posible lista de parámetros

public function inPHP($var1, $var2=''foo''){} public void function inJava($var1){ $var2 = "foo"; inJava($var1,$var2); } public void function inJava($var1,$var2){ }

PHP requiere un $ explícito que se use cuando un objeto llama a sus propios métodos. Java (como se ve en el ejemplo anterior) no.

Los programas Java suelen construirse a partir de un tipo de "ejecución de programas, se mantiene en ejecución, solicitudes de procesos", mientras que las aplicaciones PHP se crean a partir de un tipo de ejecución "ejecutar, manejar la solicitud, detener la ejecución".


  • Java está fuertemente tipado. PHP no es;
  • PHP realiza una gran cantidad de conversiones de tipo implícitas, lo que en realidad puede ser problemático y es la razón por la cual PHP5 tiene operadores como === y !== . La conversión de tipo implícito de Java se limita principalmente al auto-boxeo de tipos primitivos (PHP no tiene tipos primitivos). Esto a menudo aparece.

Considerar:

$val = ''a''; if (strpos(''abcdefghij'', $val)) { // do stuff }

que es incorrecto y no se ejecutará el bloque porque el índice de devolución de 0 se convierte en false . La versión correcta es:

$val = ''a''; if (strpos(''abcdefghij'', $val) !== false) { // do stuff }

Las sentencias condicionales de Java requieren un boolean explícito;

  • Las variables y arreglos de PHP son precedidos por $ y de otra manera indistinguibles;
  • El equivalente de las matrices asociativas PHP es PHP Maps (por ejemplo, HashMap ). Las matrices asociativas se ordenan en el orden de inserción y se pueden usar como matrices ordinarias (en los valores). Hay una implementación de Map que mantiene el orden de inserción en Java, pero esta es la excepción en lugar de la norma;
  • $arr[''foo''] = ''bar'' inserta o actualiza un elemento en una matriz asociativa. Java debe usar Map.put() y Map.get() ;
  • PHP5 tiene el equivalente de punteros a función y funciones anónimas (usando create_function() ); 5.3 introduce cierres en el nivel de idioma. Java debe usar clases internas para ambos, que es algo más detallado. Además, las clases internas están limitadas en cuanto a cómo pueden acceder a las variables del ámbito externo (lea Java Closures en JavaPapers), lo que las hace no tan potentes como los cierres verdaderos.
  • La declaración de la variable es opcional en PHP;
  • El uso de variables globales dentro de las funciones requiere el uso explícito de la palabra clave global en PHP;
  • Los parámetros POST / GET son, a menos que se configuren de otra manera ( register_globals() ) automáticamente dan como resultado variables globales del mismo nombre. Se puede acceder alternativamente a través de la variable global $_POST (y $_SESSION para variables de sesión), mientras que el soporte para estas cosas proviene de un complemento JEE llamado API de servlets a través de objetos como HttpServletRequest y HttpSession ;
  • La declaración de función en PHP usa la palabra clave de la function mientras que en Java declaras tipos de devolución y tipos de parámetros;
  • Los nombres de las funciones de PHP no pueden normalmente chocar, mientras que Java permite la sobrecarga de métodos siempre que las diferentes firmas de métodos no sean ambiguas;
  • PHP tiene valores predeterminados para los argumentos de la función. Java no. En Java, esto se implementa utilizando la sobrecarga de métodos.
  • PHP admite el patrón de método faltante , que se denomina confusamente " sobrecarga " en los documentos de PHP.

Comparar:

function do_stuff($name = ''Foo'') { // ... }

a

void doStuff() { doStuff("Foo"); } void doStuff(String what) { // ... }

  • Las constantes de cadena en PHP se declaran usando comillas simples o dobles, al igual que Perl. Las comillas dobles evaluarán las variables incrustadas en el texto. Todas las constantes de cadenas de Java usan comillas dobles y no tienen dicha evaluación de variables;
  • Las llamadas de método de objeto PHP usan el operador -> . Java usa el . operador;
  • Los constructores en Java llevan el nombre del nombre de la clase. En PHP se llaman __construct() ;
  • En objetos Java, this está implícito y solo solía ser explícito sobre el alcance y en ciertos casos con clases internas. En PHP5, $this es explícito;
  • Los métodos estáticos en Java se pueden llamar con el . operador en una instancia (aunque esto se desaconseja, es sintácticamente válido), pero en general se usa el nombre de la clase en su lugar.

Estos dos son equivalentes:

float f = 9.35f; String s1 = String.valueOf(f); String s2 = "My name is Earl".valueOf(f);

pero el primero es preferido. PHP usa el operador de resolución :: scope para estática;

  • La sobreescritura y sobrecarga de métodos es bastante natural en Java pero un poco difícil en PHP;
  • El código PHP está incrustado en lo que de otro modo sería en gran medida un documento HTML, muy parecido a cómo funcionan las JSP;
  • PHP usa el . operador para agregar cadenas. Java usa + ;
  • Los métodos Java 5+ deben usar los puntos suspensivos ( ... ) para declarar explícitamente las listas de argumentos de longitud variable. Todas las funciones de PHP son de longitud variable;
  • Las listas de argumentos de longitud variable se tratan como matrices dentro de cuerpos de métodos. En PHP, debe usar func_get_args() , func_get_arg() y / o func_num_args() ;
  • y sin duda más, pero eso es todo lo que viene a la mente por el momento.

Creo que estos dos lenguajes (así como sus sistemas de tiempo de ejecución) son demasiado diferentes para enumerar todas las diferencias. Algunos realmente grandes que vienen a mi cabeza:

  • Java se compila en bytecode, PHP se interpreta (como señaló Alan Storm, ya que PHP 4, no lo es, pero aún se comporta como si lo fuera);
  • Java es fuerte y tipado estáticamente, mientras que PHP es bastante débil y tipeado dinámicamente;
  • PHP se usa principalmente para generar dinámicamente páginas web. Java también puede hacer eso, pero también puede hacer cualquier otra cosa (como Applets, software para teléfonos móviles, material de Enterprise, aplicaciones de escritorio con y sin GUI, juegos 3D, Google Web Toolkit ...); y
  • agrega tu diferencia favorita aquí

Notarás la mayoría de las diferencias cuando sea el momento, pero lo más importante:

  • PHP ofrece OOP (programación orientada a objetos) como una opción que se ignora en la mayoría de los proyectos. Java requiere que programes el modo OOP, pero cuando aprendes Java con un fondo en un lenguaje que no es tan OOP, es muy fácil complicar las cosas y usar OOP de forma incorrecta (o puedes llamarlo de manera subóptima) o la forma ineficiente ...).