mi permetto di suggerirti un approccio leggermente diverso da quello di Santino83_02, la logica è la stessa ma gestita in modo diverso
Codice PHP:
// le funzioni comuni del modello o entità
abstract class model {
protected $fields = array();
public function __construct( array $data ) {
foreach ( $data AS $name=>$value ) {
$this->$name = $value;
}
}
// setter e getter come sempre non riscrivo il codice
public function __set() {
}
public function __get() {
}
}
// questa è la rappresentazione della tabella mysql person "entità"
class personModel extends model {
protected $fields = ( 'id', 'nome', 'cognome' );
}
i dati li recuperi con un mapper
Codice PHP:
// le funzioni comuni del mapper
abstract class mapper {
protected $pdo;
protected $table;
abstract protected function model( array $data );
public function __construct( myPDO $pdo ) {
$this->pdo = $pdo;
}
}
// il mapper
class personMapper {
protected $table = 'persons';
public function model( array $data ) {
return new personModel( $data );
}
public function fetch( $id ) {
$selectQuery = <<<QUERY
SELECT
*
FROM
$this->table
WHERE
id = :id
LIMIT
0,1
QUERY;
$data = $this->pdo->executeQuery( $selectQuery, array( 'id'=>$id ) )->fetch();
if ( empty( $data ) ) {
return NULL;
}
//qui la magia :)
return $this->model( $data );
}
public function fetchAll() {
$selectQuery = 'SELECT * FROM $this->table';
$sql = $this->pdo->executeQuery( $selectQuery );
$rows = array();
while ( $row = $sql->fetch() ) {
// ancora la magia :)
$rows[] = $this->model( $row );
}
return $rows;
}
}