¿Por qué PHP no proporciona una interfaz de colecciones robusta como otros idiomas?

Estás cubriendo varios temas en una oración.

  1. PHP había nacido como una colección de scripts útiles que emulaban un lenguaje familiar “C” en el pasado. Esto reemplazó la engorrosa necesidad de implementar CGI C / C ++ (estamos hablando de los años 1990 aquí).
    Como tal, PHP se entiende como una navaja suiza (bastante excelente), con características de acción rápida.
  2. A medida que pasaron los años, PHP amplió su amplitud e incluyó más y más funciones orientadas a objetos (al principio), luego más y más funciones de sintaxis (interfaces, espacios de nombres …), luego más y más funciones funcionales de lenguaje.
    En este momento tenemos un lenguaje muy divertido y práctico que da libertad para codificar básicamente cualquier cosa y con la mayoría de las características que esperarías de un lenguaje moderno. De hecho, se ven afectados por el pasado de PHP y por el crecimiento no orgánico de PHP a lo largo de los años.
  3. Una de las consecuencias de un período de tiempo tan largo es el hecho de que los marcos deben cubrir algunas versiones anteriores de PHP, que de hecho son más pobres en características.
    Los marcos en sí mismos a menudo tienen algunos años y se han desarrollado cuando algunas de las funciones más recientes de PHP no estaban disponibles. Por lo tanto, esos marcos implementaron sus propias colecciones.
  4. En cualquier caso, es importante notar cómo PHP implementó e implementa colecciones principalmente como mapas ordenados bastante versátiles que llama “matrices”. Al estar programado, PHP nunca se enfocó en optimizaciones de grado pico-segundo, las matrices proporcionadas son tan rápidas como sea necesario. Con tales “arreglos” tan versátiles, casi nunca necesita implementar nada complejo por sí mismo.
  5. Para aquellos que desean utilizar estructuras e interfaces de colecciones “formales”, están disponibles desde la versión 7.

PHP fue escrito para programación web, y no le importaba ser un lenguaje robusto fuera de ese contexto. Las funciones son generalmente globales y no están bien divididas en espacios de nombres. Esto se debe a que llevaría tiempo cargar los módulos, lo que reduciría la capacidad de respuesta, que no es lo que desea en una página web. Entonces, ¿por qué hay un mapa dinámico para gobernarlos a todos? Porque generalmente es suficiente para hacer una página web. Además, escribir todo cada vez que se genera una página web sería costoso.

¿Te das cuenta de que lo llamé un mapa de montón y no una matriz? Eso es porque eso es lo que es. PHP lo llama una matriz, pero no es para nada como una matriz de Java en lo más mínimo. Es un mapa de montón que puede asignar valores numéricos y de cadena en valores más numéricos, de cadena y de referencia (que apuntan a más ubicaciones de mapas de montón).

Pueden existir otros objetos de colecciones en PHP, pero para obtener un rendimiento similar al del mapa dinámico de PHP, deben implementarse en enlaces zend-> c y pasarse como controladores, lo cual es una hazaña en sí misma. Realmente necesitaría una estructura de datos especial para poner esto en una página web, que generalmente se limita a un megabyte de información de salida de todos modos.

PHP no es el lenguaje para entrar si amas los algoritmos y la informática. Resuélvete a la idea de que el mapa dinámico de PHP (Array) es lo suficientemente sensible como para entregar tu página web o simplemente programar Ruby, Java o C #.

Me refiero a las colecciones implementadas en java.util y System.Collections.

PHP es un lenguaje dinámico con escritura débil, como python ruby, javascript y muchos otros, ninguno de ellos tiene colecciones.

Las colecciones como en Java y C # simplemente no tienen ningún sentido porque si tienes la verificación de tipo de matrices / hash, el lenguaje ignorará esa información para los tipos de var básicos.

En cambio, necesita que todo el lenguaje esté completamente tipeado para aprovechar los conceptos de colección / genéricos.

El lenguaje Hack (Hack) implementado por Facebook es exactamente eso, un PHP con verificación de tipo y, por lo tanto, colecciones genéricas.