Explicació dels mètodes fets servir a php mysql select
Contingut
Ús dels Mètodes de la Classe TableRows
La classe TableRows estén RecursiveIteratorIterator, la qual cosa significa que està dissenyada per recórrer estructures de dades recursives (en aquest cas, un array d'arrays obtingut de la base de dades) i cridar els seus propis mètodes en punts específics del procés d'iteració.
Aquí teniu el detall d'on es criden els mètodes:
1) Constructor __construct($it)
- On es fa servir:
foreach(new TableRows(new RecursiveArrayIterator($stmt->fetchAll())) as $k=>$v) {
echo $v;
}
- Explicació:
S'invoca una sola vegada quan es crea la nova instància de la classe TableRows just abans que comenci el bucle foreach.
El constructor rep l'objecte RecursiveArrayIterator (que conté totes les files i columnes de la consulta SQL) i crida al constructor del pare (parent::__construct($it, self::LEAVES_ONLY);), configurant l'iterador per només retornar els valors finals (les dades de les columnes, no els noms de les files ni les columnes).
mode LEAVES_ONLY
El mode LEAVES_ONLY assegura que el mètode current() de la classe TableRows es crida només quan l'iterador arribi a un valor de columna (la "fulla").
Això permet que el mètode current() agafi directament el valor de la dada i l'embolcalli amb l'etiqueta HTML .... Si s'utilitzés un mode diferent (com el mode per defecte CHILD_FIRST), current() es cridaria també per als arrays de files, cosa que no voldríem, ja que no són el que ha d'anar dins d'una cel·la .
2) Mètode beginChildren(): void
- On es fa servir:
foreach(new TableRows(...) as $k=>$v) {
echo $v;
}
- Explicació:
Aquest mètode és cridat automàticament per l'objecte RecursiveIteratorIterator (la classe pare) cada vegada que comença a iterar sobre un nou element "fill", que en aquest context es tradueix a l'inici d'una nova fila de resultats (el nou array associatiu dins de l'array principal).
La seva funció és imprimir l'etiqueta d'inici de fila HTML: .
3) Mètode current(): string
- On es fa servir:
foreach(new TableRows(...) as $k=>$v) {
echo $v; // Aquesta línia rep el valor retornat per current()
}
- Explicació:
És el mètode més cridat. S'invoca automàticament per l'iterador per obtenir el valor actual de l'element que s'està recorrent. En el mode self::LEAVES_ONLY, això passa per a cada columna (id, firstname, lastname) de cada fila.
El mètode recupera el valor de la columna amb parent::current() i l'embolcalla amb les etiquetes de cel·la de taula HTML amb estil: .... El valor d'aquesta cel·la HTML s'assigna a la variable $v del bucle foreach i s'imprimeix amb echo $v;.
4) Mètode endChildren(): void
- On es fa servir:
foreach(new TableRows(...) as $k=>$v) {
echo $v;
}
- Explicació:
Aquest mètode és cridat automàticament per l'objecte RecursiveIteratorIterator cada vegada que acaba de recórrer tots els elements "fills" d'un recurs, que en aquest cas es tradueix a la fi de l'iteració sobre les columnes d'una fila de resultats.
La seva funció és imprimir l'etiqueta de final de fila HTML: i un salt de línia.
Resum del Flux de l'Iteració
El bucle foreach no recorre directament l'array de dades, sinó l'objecte TableRows. Això fa que el procés de generació de la taula sigui:
- 1. Inici de l'Iteració (Per a la primera fila): Es crida beginChildren() --> Imprimeix <tr>.
- 2. Iteració de la Primera Columna (id): Es crida current() --> Imprimeix <td ...>1</td>.
- 3. Iteració de la Segona Columna (firstname): Es crida current() --> Imprimeix <td ...>John</td>.
- 4. Iteració de la Tercera Columna (lastname): Es crida current() --> Imprimeix <td ...>Doe</td>.
- 5. Fi de l'Iteració de la Fila: Es crida endChildren() --> Imprimeix </tr>\n.
- 6. Repetició (Per a la següent fila), tornant al punt 1.
Aquesta implementació aprofita la interfície Iterator de PHP per delegar la lògica de generació del markup HTML de la taula a la classe TableRows, mantenint el codi principal de la connexió a la base de dades i l'execució de la consulta més net.