2010-12-16 7 views
8

Me encanta PHP porque:
_ fácil desarrollar aplicaciones web (configura LAMP de 10 minutos y ya está listo para ir)
_ fácil de aprender
_ fácil de implementar (sólo tiene Apache con el módulo PHP)¿Cómo hacer PHP más Javatized (también conocido como fuertemente tipado, más robusto)?

realmente amo Java porque:
_ Es inflexible de tipos

me quedé sorprendido por el desarrollo con Java y Netbeans. Cada vez que había una discrepancia de tipo, el IDE me alertó mientras desarrollaba y el IDE mismo estaba sugiriendo la solución.

Creo que escribir fuerte es una dicha. Eso es cierto: las matrices PHP que pueden contener cualquier cosa aceleran su desarrollo, pero luego tiene que perder tiempo encontrando errores, mientras que con un poco más de trabajo, tiene el IDE que le señala los problemas. Eso me hace sentir más confianza también durante la refactorización.

Entonces, mi pregunta es: ¿es posible usar tipos en PHP (incluido el valor de retorno de un método)? ¿Conoces un proyecto, un tenedor, cualquier cosa que me permita hacer eso?
Podría ser solo un pre-analizador que verifique algunos comentarios antes del analizador PHP en sí (es decir, public function /*ConfBuilders[]*/ getConfBuilders(/*int*/ confId)).
Cualquier cosa que introduzca un concepto de tipo y, por lo tanto, en mi opinión, haría una aplicación PHP más robusta y, finalmente, más rápida de implementar (ahora mismo creo que es más rápido desarrollar software en Java que en PHP, gracias a la ayuda del IDE).

Gracias,
Dan

EDIT: Esta es la única cosa que he encontrado en la web:
http://cstruter.com/blog/44 pero no me gusta, sobre todo porque no se puede declarar las propiedades de los objetos de forma estándar y, con seguridad, ralentizar la ejecución del script. Me gustaría un método que funcione sin conexión, mientras desarrollas ... una especie de compilación.

+5

Debe dividir primero PHP por "0" – Stephen

+3

"fácil de desarrollar" es una de las grandes razones por PHP no es "inflexible" – zerkms

+0

@Stephen: ?? ????????????? – dan

Respuesta

6

Hay un par de maneras de hacer que su código sea más rígido.

  1. Utilice la sugerencia de tipo en los métodos para restringir el tipo de argumento. Esto funciona solo para clases, interfaces y matrices. Ver ejemplo:

    class Foo { } 
    class Bar { 
        function quux(Foo $f) { } 
    } 
    

utilizo tipo dando a entender todo lo que pueda para salvarme de errores tontos como pasar valor nulo o primitivo, mientras que se desea objeto. Los valores devueltos lamentablemente no están fuertemente tipados.

  1. calificadores Uso de acceso: public, protected, private. Mientras que una entidad externa puede acceder a los miembros públicos, solo se puede acceder a los elementos públicos protegidos y privados por instancia de la misma clase (base). También considere usar calificadores abstract y final.

  2. Codifique las interfaces en lugar de las clases, use la composición y la agregación de manera agresiva. Acostúmbrate a usar la inyección de dependencia. Use patrones de diseño bien conocidos cuando corresponda.

  3. Familiarícese con los elementos de Reflection y Aspect Oriented Programming. Si bien hay muy poco PHP tiene que ofrecer en el área de AoP, su subsistema de reflexión es bastante bueno. Puede usar @annotations en los comentarios de doc-block para aprovechar la metaprogramación. Lo uso mucho para anotar las clases con la ubicación de las pruebas unitarias. También tengo una implementación de ACL donde los métodos de controlador se anotan con (para hacer corta una larga historia) nivel de acceso requisito:

    /** 
    * @AclActivity('view-services') 
    * @AclActivity('edit-services') 
    */ 
    public function editServiceAction() { ... } 
    
  4. Por último, no se limite a PHP. Lea sobre otros lenguajes, no solo los convencionales, sino también oscuros, estos están llenos de ideas brillantes. Echa un vistazo a Lisp, Erlang, Rebol. Encuentre aplicaciones inusuales para idiomas existentes, como la programación de JavaScript del lado del servidor. Escribe tu propio idioma Sí, va a apestar, pero aprenderás mucho.

+2

"Sí, se va a chupar" –

8

Encuentra otro idioma.

La escritura débil y la compilación JiT son parte de lo que hace PHP PHP. Si sientes que las características de PHP van en contra de tu filosofía de codificación, entonces, por supuesto, no la uses.

Hay otros lenguajes como Ruby que tiene un estilo fuerte pero JiT compilado como PHP.

0

¿Has mirado Eclipse en absoluto? Es un IDE Java y PHP muy fuerte. Además, también te permite definir tipos dentro de los comentarios. Claro que no es sólido ... pero las sugerencias del código ayudan.

/** 
* Create a Person 
* 
* @param string $name 
* @param int $age 
* @return String 
*/ 
function person($name, $age) { 
    $this->name = $name; 
    $this->age= $age; 
    return "Hello ".$name; 
} 
+0

Lo mismo funciona para NetBeans que parece que el autor de la pregunta ya está familiarizado. Pero desafortunadamente esto no causa que el IDE reporte un error en el código como lo haría con Java. –

+0

Ah, nunca he usado Netbeans ... Necesito Eclipse para Zend :) – cdnicoll

0

Hace casi una década que escribió el cargo por parte del PO, en ese puesto que he implementado una solución muy crudo, que falsifica esencialmente inflexible de tipos usando métodos mágicos (estoy de acuerdo, no tan grande), pero en la última versión de PHP las cosas evolucionaron un poco.

PHP no será nunca (me atrevería a decir) convertido en un lenguaje fuertemente tipado, pero yo creo que en un futuro próximo podría convertirse en un lenguaje con tipos gradualmente (como texto mecanografiado).

A partir de PHP 7.x es posible declarar tipos de devolución de funciones y declarar/insinuar tipos escalares.

class Person 
{ 
    private $age; 
    public function __construct(int $age) { 
     $this->age = $age; 
    } 
    public function getAge() : int { 
     return $this->age; 
    } 
} 

La única parte todavía falta en esta ecuación (PHP haciendo gradualmente mecanografiado) es la capacidad para declarar tipos de propiedad, sin embargo, esto se ha propuesto en un recent draft document.

class Person 
{ 
    public int $Age; // Not possible yet 
} 

Extractos de http://cstruter.com/blog/410

Cuestiones relacionadas