entonces siguiendo la teoria de POO debemos implementar un objeto para la representacion de esta tabla.
El hecho de que implementes una clase para representar una tabla no es un paradigma, es un patrón de diseño que se llama
active record. Si hicieras las consultas cuando las necesitases en una clase cualquiera seguiria siendo poo.
...eres de los que prefieren sanear las variables en la entrada de datos...
Me refiero a que en:
$sql = "select * from $this->_TABLA where codigo='$this->_CODIGO'";
Tienes una inyección sql, si es el usuario quien define codigo en el constructor y no la saneas en ese momento tienes un problema, yo prefiero sanear cada variable en cada clase porque tiendo a reutilizar mucho código, pero hay quien lo hace en $_REQUEST['codigo'] una sola vez, en el caso de que no venga del usuario no hay que preocuparse.
Pero bueno, supongo que no tiene importancia porque ahora con el segundo código veo que esto deber ser más un trabajo de clase que algo real.
Sea como sea lo que está claro es que los dos casos son correctos, pero mi punto de vista sobre el código:
$sql = "select * from $this->_TABLA where codigo='$this->_CODIGO'";
Si creas una clase conexion, mejor que sea de verdad conexion y que la utilices siempre en esta clase o en cualquier otra(asbtracción) que sea plenamente objeto de base de datos simplemente heredando de la clase conexion.
El poner codigo= hace que esta clase solo te vaya a servir con tablas que tengan este campo.
Opciones:
-Lo mapeas en un xml igual que _TABLA
-No mapeas _TABLA, quitas el valor del constructor y creas selectById(tabla,campo,valor)
Imaginemos el segundo caso que es el más rapido de implementar, esto te permitiria tener una clase que te abstraeria de la base de datos, podrias crear metodos que te facilitarian mucho el trabajo a la larga: limpiartabla(tabla); deleteById(tabla,campo,valor); update(tabla,campo,valor,campocondicion,valorcondicion) etc etc
Entonces alumno evidentemente tiene que especificar más, en concreto la estructura de la tabla, con lo que tendrías selectbyId('Alumno','codigo',$codigo) donde codigo lo pasarias en el constructor. Además tambien seguirias especificando la estructura de la tabla con sus campos en cada getter y setter.
Que ventajas concretas te da esto gracias a la poo+active record:
-Si cambias de base de datos donde la sintaxi es distinta solo tendrás que crear otra clase conexion para la otra bd.
-Si cambias la estructura de la tabla usuario, ya sean los nombres de los campos, sus tipos o añades campos nuevos, solo tendrás que modificar la clase usuario.
Además del resto de ventajas de tener bien especificado cada concepto en una clase distinta.
El segundo código a mi me gusta menos, le quitas toda su potencia a conexion y el que después tengas que repetir código en el resto de clases no suele ser una buena señal.
Espero no haber sido muy coñazo, es que me gusta bastante la teoria de la poo
.
Saludos!