2008-09-15 11 views
9

Tengo curiosidad si existe algún proyecto que intente agrupar todas (o la mayoría) de las funciones incorporadas de PHP en una jerarquía de clases más orientada a objetos. Por ejemplo, agrupando todas las funciones de cadena en una única clase String, etc.¿Alguien ha intentado hacer que las funciones del sistema de PHP estén más orientadas a objetos?

Me doy cuenta de que esto no solucionará ningún problema (a menos que las modificaciones se hayan realizado en el nivel de código PHP), ya que todo las funciones seguirían estando accesibles en el espacio de nombres global, pero ciertamente facilitarían la usabilidad.

Respuesta

4

Para responder a su pregunta, sí existen varias bibliotecas que hacen exactamente lo que usted está hablando. En cuanto a cuál quieres usar es una pregunta completamente diferente. PHPClasses y pear.org son buenos lugares para comenzar a buscar tales bibliotecas.

Actualización: Como los otros han sugerido SPL es una buena biblioteca y envuelve muchas de las funciones integradas de php. Sin embargo, todavía hay muchas funciones de PHP que no se ajustan. Dejándonos quietos sin una bala de plata.

Al utilizar frameworks como Cakephp y Zend (otros también), he notado que intentan resolver algunos de estos problemas incluyendo sus propias bibliotecas y construyendo conceptos básicos como conectividad DB en el trabajo de marco. Así que los marcos pueden ser otra solución

5

Creo que algo así es intergral para que PHP avance. Siendo principalmente un programador de .Net, me resulta doloroso trabajar con PHP con 1 millón y 1 funciones globales. Es agradable que PHP 5.3 tenga espacios de nombres, pero no ayuda mucho cuando sus propias bibliotecas ni siquiera están orientadas a objetos, y mucho menos emplean espacios de nombres. No me importa mucho el PHP como lenguaje, pero su API está terriblemente desorganizada y probablemente necesite una revisión completa. Algo así como lo que VB pasó cuando se convirtió en VB.Net.

+1

De acuerdo, pero ... su documentación no tiene paralelo. –

+0

Definitivamente estoy de acuerdo, me gustaría ver esto como una prioridad para PHP 6. Ya que ahora están liberando soporte de espacio de nombres en las próximas 5.3 lanzamiento, estoy esperando que el próximo paso lógico sea comenzar a mover sus funciones de biblioteca estándar a su propia jerarquía de espacio de nombres/clase. – Wilco

+0

solo podemos esperar – SeanDowney

6

Demasiadas veces. Tan pronto como alguien descubre que PHP tiene características OO, quiere envolver todo en clases.

El objetivo de OO en PHP es que pueda diseñar sus soluciones de la forma que desee. Pero envolver las funciones existentes en Objetos no rinde mucho beneficio.

Dicho esto, el núcleo de PHP ya está bastante orientado a objetos. Eche un vistazo al SPL.

+0

SPL es definitivamente un paso en la dirección correcta. Simplemente creo que es extremadamente complicado tener tanta funcionalidad central en el espacio de nombres global. Me parece ridículo que tenga que preocuparme por nombrar colisiones con lo que está incorporado en el lenguaje. – Wilco

+0

Si escribe su propio código de una manera OO, rara vez hay alguna preocupación. Dado que las posibilidades de conflicto con cualquier cosa en el núcleo es casi cero. E incluso si lo haces, fracasará. Sin embargo, llego completamente a donde vienes. PHP simplemente no tiene ese sabor. Python podría ser una mejor opción. –

4

No estoy de acuerdo. La Programación Orientada a Objetos no es intrínsecamente mejor que la programación de procedimientos. Creo que no deberías usar OO a menos que necesites un comportamiento polimórfico (herencia, métodos de anulación, etc.). Usar objetos como contenedores simples para el código no vale la pena. Esto es particularmente true de cadenas porque se usan tanto (por ejemplo, como teclas de matriz). Cada aplicación generalmente puede beneficiarse de algunas características polimórficas, pero generalmente a un alto nivel. ¿Alguna vez quisieras extender una clase String?

Además, se necesita un poco de historia para entender el nombre de la función impar de PHP. PHP se basa en The Standard C Library y en el estándar POSIX y utiliza muchos de los mismos nombres de funciones (strstr, getcwd, ldap_open, etc.). Esto es realmente una buena cosa porque minimiza la cantidad de código de enlace de idioma, garantiza un conjunto completo de características bien pensadas (casi todo lo que puede hacer en C puede hacerlo en PHP) y estas bibliotecas de sistema están altamente optimizadas (por ejemplo, strchr usualmente está alineado, lo que lo hace aproximadamente 10 veces más rápido).

+0

Punto bien tomado. Sin embargo, si valdrá la pena la sobrecarga también dependerá del contexto. Sacrificamos el rendimiento para un código simplificado todo el tiempo; de lo contrario, todos estaríamos desarrollando en ensamblaje. – Wilco

Cuestiones relacionadas