PHP5DBObject: Un DB framework en PHP5
Luego de mucho aplazarlo, finalmente he hecho el cambio a PHP5, básicamente por el soporte mejorado que tiene de una verdadera programación orientada a objetos.
Aunque la verdad, todavía tiene bastante por mejorar (tiene problemas con la herencia de métodos estáticos) es una mejora considerable al soporte de OO que tenía PHP4 (que básicamente era encapsulación de código y no un verdadero soporte OO).
En fin, he querido marcar el inicio de esta nueva “etapa” con un proyecto interesante… y de ahí nace este proyecto: PHP5DBObject (si les parece que el nombre es un poco rebuscado, traten de conseguir uno mejor que está libre en SourceForge
)
Este proyecto que pienso liberar bajo LGPL, tiene la siguiente finalidad:
Proveer una forma sencilla de acceder a la información de base de datos a través de objetos (un poco al estilo Beans de Java)… pero, sin tener que codificar estos objetos
Para hacerse una idea, imaginen la siguiente estructura de datos:
![]()
Crear una compañía con sus datos relacionados podría ser tan sencillo como:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | $company = new Company(); $company->setName("Company Inc"); $company->setAddress("Company St., 7777"); $company->create(); $person = new Person(); $person->setName("Paolo"); $person->setCompany($company); $person->create(); $email = new Email(); $email->setAddress("paolo@companyinc.com"); $email->setPerson($person); $email->create(); ?> |
Sería bastante sencillo, sobre todo si no tienes que definir los objetos Company, Person o Email
Y entonces ¿qué es lo que hay que hacer?, configurarlos. Para este ejemplo en particular, la configuración sería así:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 | $config = array( 'Company' => array( 'table' => 'company', 'properties' => array('id' => 'integer', 'name' => 'text', 'address' => 'text'), 'id' => array('id'), 'auto_increment' => true, 'methods' => array( 'getPersons' => array( 'method' => 'getList', 'class' => 'Person', 'where' => array('company_id' => 'id') ) ), ), 'Person' => array( 'table' => 'person', 'properties' => array( 'id' => 'integer', 'name' => 'text', 'company_id' => 'integer' ), 'id' => array('id'), 'auto_increment' => true, 'methods' => array( 'getEmails' => array( 'method' => 'getList', 'class' => 'Email', 'where' => array('person_id' => 'id') ), 'getCompany' => array( 'method' => 'getFK', 'class' => 'Company', 'id' => array('id' => 'company_id') ), 'setCompany' => array( 'method' => 'setFK', 'class' => 'Company', 'set' => array('company_id' => 'id') ), ), ), 'Email' => array( 'table' => 'email', 'properties' => array( 'id' => 'integer', 'address' => 'text', 'person_id' => 'integer' ), 'id' => array('id'), 'auto_increment' => true, 'methods' => array( 'getPerson' => array( 'method' => 'getFK', 'class' => 'Person', 'id' => array('id' => 'person_id') ), 'setPerson' => array( 'method' => 'setFK', 'class' => 'Person', 'set' => array('person_id' => 'id') ), ), ), ) ?> |
Con esta configuración se exponen además otros métodos que no se muestran en el ejemplo.
Por ahora, lo tengo que dejar aquí, pero apenas me hayan aprobado el proyecto en SouceForge.net colocaré un enlace y comenzaré a documentar esto.
Paolo
un comentario »
RSS feed de los comentarios. TrackBack URL
deja un comentario