descargar - Colecciones similares a Java en PHP
java jdk (7)
Estoy aprendiendo PHP5 (la última vez que revisé PHP fue en PHP4 días) y me alegra ver que PHP5 OO es más similar a Java que PHP4 pero todavía hay un problema que me hace sentir bastante incómodo debido a mi Java fondo: arrays.
Estoy leyendo "Proffesional PHP6" (Wrox) y muestra su propia implementación de colección. He encontrado otras clases como la de http://aheimlich.dreamhosters.com/generic-collections/Collection.phps basadas en SPL. También he encontrado que hay algún tipo de colección en SPL (ArrayObject)
Sin embargo, me sorprende porque realmente no veo que la gente use Colecciones en PHP, parece que prefieren matrices.
Entonces, ¿no es una buena idea usar Colecciones en PHP al igual que la gente usa ArrayList en lugar de matrices básicas en Java? Después de todo, las matrices de php no son realmente como las matrices de Java.
A veces uso esta implementación muy simple para darme una colección aproximada y lista.
Normalmente, el requisito principal de una colección es imponer un grupo de un tipo de objeto, solo tiene que configurar una clase básica con un constructor para implementarla.
class SomeObjectCollection {
/**
* @var SomeObject[]
*/
private $collection = array();
/**
* @param SomeObject $object1
* @param SomeObject $_ [optional]
*/
function __construct(SomeObject $object1 = null, SomeObject $_ = null)
{
foreach (func_get_args() as $index => $arg) {
if(! $arg instanceof SomeObject) throw new /RuntimeException(''All arguments must be of type SomeObject'');
$this->collection[] = $arg;
}
}
/**
* @return SomeObject[]
*/
public function getAll()
{
return $this->collection;
}
}
Las colecciones en Java tienen mucho sentido ya que es un lenguaje fuertemente tipado. Tiene sentido tener una colección de, digamos, "Coches" y otra de "Motos".
Sin embargo, en PHP, debido a la naturaleza tipificada dinámicamente, es bastante común sacrificar la formalidad de las Colecciones. Las matrices son suficientes para ser utilizadas como contenedores genéricos de varios tipos de objetos (automóviles, motocicletas, etc.). Además, el beneficio adicional proviene del hecho de que las matrices pueden mutarse muy fácilmente (lo que a veces puede ser una gran desventaja cuando no se realiza la comprobación adecuada de los errores).
Vengo de un entorno Java, y descubrí que el uso de un patrón de diseño de Colecciones en PHP no ofrece muchas ventajas (sin subprocesos múltiples, sin optimización de la asignación de memoria, sin iteradores, etc.).
Si está buscando alguna de esas ventajas, probablemente sea mejor construir una clase de envoltura alrededor de la matriz, implementando cada función (iteradores, etc.) a la carta.
Las matrices de PHP son asociativas ... Son mucho más poderosas que las matrices de Java, e incluyen gran parte de la funcionalidad de List <> y Map <>.
¿Qué quieres decir con "buena idea"? Son herramientas diferentes, usar un idioma en la forma en que usaste otro usualmente resulta en frustración.
Soy una colección de objetos muy profesional en PHP, se pueden usar para agregar seguridad de tipos, implícito funciones de búsqueda, clasificación y manipulación fáciles de usar, y representan el enfoque correcto de OO en lugar de usar arrays y la multitud de funciones útiles pero de procedimiento que operan en En diferentes patrones en toda la fuente.
Tenemos varias colecciones que utilizamos para diversos fines, todos ellos perfectamente heredados promoviendo la seguridad de tipos, estándares de codificación coherentes y un alto nivel de reutilización de códigos.
¡Pero ultimatley, todos son matrices internamente!
Supongo que realmente se trata de una elección, pero en mi mundo orientado a objetos me gusta mantener segmentos de código fácilmente repetibles, como los algoritmos de clasificación y búsqueda en las clases básicas, y me parece que la notación de objetos es más auto documentada.
Varien Lib proporciona una buena implementación de la colección en PHP, esta biblioteca es parte del código de Magento con licencia OSL. (Más información sobre la licencia de Magento y la reutilización del código here .
No se puede encontrar ningún código fuente para la biblioteca, por lo que la mejor manera es descargar magento y luego buscar en / lib / Varien /
Yii tiene implementación de java completo como colecciones de colecciones
Yo también me sentí un tanto consternado al no encontrar clases de tipos de Colección en PHP. Las matrices tienen un par de desventajas reales en mi experiencia.
Primero, el número de funciones disponibles para manipularlas es algo limitado. Por ejemplo, necesito poder insertar y eliminar elementos de / a arbitrariamente de una Colección en una posición de índice determinada. Hacer eso con las funciones de lenguaje integradas para arreglos en PHP es doloroso en el mejor de los casos.
En segundo lugar, como una especie de ramificación del primer punto, escribir código limpio y legible que manipule los arreglos en cualquier nivel de complejidad más allá del simple empuje / pop e iterador es, en el mejor de los casos, difícil. A menudo encuentro que tengo que usar una matriz para indexar y hacer un seguimiento de otra matriz en las aplicaciones de uso intensivo de datos que creo.
Prefiero trabajar en un marco (mi elección personal es NOLOH ). Allí, tengo una clase de colección real llamada ArrayList que tiene funciones como Agregar, Insertar, Eliminar, Eliminar y Cambiar. Me imagino que otros marcos de PHP abordan este problema también.