Php poo + pdo

victorvu

Beta
Programador
¡Usuario con pocos negocios! ¡Utiliza siempre saldo de Forobeta!
Desde
24 Feb 2013
Mensajes
118
Hola de nuevo

Empece programando php de forma estructurada y ahora queria que lo domino queria comenzar con php poo (tengo conocimientos de poo de java)

1- No entiendo bien si deberia crear 1 proyecto php completo con todas sus clases independiente de la base de datos, es decir que por ejemplo si tengo un sistema de usuario, sistema de mensajes, etc deberia tener la clase usuario, mensajes, etc. Para que sea mas claro:

Si en mi base de datos tengo las tablas:
Usuario-> nick, correo, idprovincia, idsexo
Provincia-> idPais, idProvincia, nombre
Pais-> idPais, nombre
Sexo-> idSexo, nombre

En php lo haria:
Usuario-> nick, correo, pais, sexo
Pais-> idPais, provincia, nombre
Provincia-> idProvincia, nombre
Sexo-> idSexo, nombre

2- Al realizar una consulta en la base de datos deberia utilizar los datos obtenidos de forma directa o crear objetos y luego utilizarlos? x ejemplo hago un select y obtengo 30 usuarios, deberia crear 30 objetos usuarios o utilizar los resultados como vienen de la consulta?

gracias!!
 

Delmon

Épsilon
Programador
Verificación en dos pasos activada
Verificado por Whatsapp
Desde
5 Ago 2008
Mensajes
836
Hazlo igual que en Java. Por ejemplo, yo creo una carpeta en mi proyecto de PHP y lo llamo Clases.
dentro van las clases, en el caso que sea un sistema de usuarios crearia:

usuario.class.php

Dentro de ello crearía los métodos, por ejemplo un método sería listarUsuarios(). La cual ejecutaría una consulta SQL y retornaría un ResultSet para mostrar.

No creo que sea necesario hacer un select y crear 30 objetos, pues al final es solo muestra. El proceso sería al momento de guardar un nuevo usuario, ahí tendrías que crear una instancia de la clase usuario.class.php y mandarla por parámetro para insertar.
 

Isabel

Zeta
Verificado
Verificación en dos pasos activada
Verificado por Whatsapp
Desde
22 Ene 2010
Mensajes
1.822
Veo que Delmon ya te respondió, haz la misma estructura que haces con Java.
 

Galbatorix

Dseda
¡Usuario con pocos negocios! ¡Utiliza siempre saldo de Forobeta!
Desde
13 May 2013
Mensajes
1.231
El objeto seria el QuerySet o ResultSet como le dicen. Dependiendo del tipo de consulta que hagas ese "Set" puede ser inmutable (que no puede cambiarse o solo lectura) o lo contrario. Pero sobre esa objeto te mueves. Y entonces cada fila en ese objeto es también un objeto de tipo user, pero ese objeto sea al obtener los resultados. Luego cada usuario tiene un objeto pais, con sus respectivas propiedades. Pero la idea es que solo creas uno, el QuerySet, los objetos que contiene son instancias que heredan las propiedades de sus respectivos creadores.
 

victorvu

Beta
Programador
¡Usuario con pocos negocios! ¡Utiliza siempre saldo de Forobeta!
Desde
24 Feb 2013
Mensajes
118

Es decir que en realidad la clase usuario tendria los metodos para tratar a los usuarios que estan en la base de datos y no los atributos de los usuarios
 

juanec27

Gamma
Programador
¡Usuario con pocos negocios! ¡Utiliza siempre saldo de Forobeta!
Desde
19 Mar 2011
Mensajes
207
Aplicar al 100 % la POO en un proyecto web usando el lenguaje que sea termina siendo un poco ambiguo pues normalmente uno utiliza mas el concepto de MVC... te vas a familiarizar mas con esto y te importara muy poco si son clases o archivos de miles de funciones (pero deben de ser clases) pues lo que te importara sera que modelos crear para obtener los datos de BD de una determinada entidad, por ejemplo usuarios, crear un modelo de usuarios que obtenga todo lo relacionado con un usuario, el tipico CRUD y otras cosas que necesites.

Necesitaras un controlador de usuarios que normalmente seran todas las url que puede visitar un usuario o pertenecientes a las acciones de un usuario como login, signin, update, no se x decir algo.... claro las vistas es la plantilla y donde se ven los datos....

A comparacion de mera POO por ejemplo con Android... podriamos decir que existen similitudes de usar MVC con clases y una tipicia POO si tenemos una app en la que necesitamos hacer POST al server puedes crear una Clase que se encargue de eso...., otra clase que se encargue de otras cosas en tu app... pero si te das cuenta aqui pues no existe tanto el concepto de MVC si no propiamente de POO

Me parece que seran pocas la veces en que en verdad uses la POO como debe de ser, para eso tendrias que usar UML y RUP etc etc

En pocas palabras lo basico de POO que puedes usar en un proyecto web es creacion de clases que finalmente seran helpers para unas funciones determinadas... como te digo una clase de manejo de BD y otra clase que herede de esta para manejo de consultas esclusivamente a usuarios, pero para ser sincero es mucho rollo y con frameworks de desarollo web para tu lenguaje favorito pues te evitas eso xke casi la mayoria implementa el MVC y al final tienes una clase (modelo) para manejar a tus usuarios pero, hironias de la vida, heredaran de otra propiamente del framework para manejar la BD como en Code Iginiter para PHP
 

victorvu

Beta
Programador
¡Usuario con pocos negocios! ¡Utiliza siempre saldo de Forobeta!
Desde
24 Feb 2013
Mensajes
118

Entonces estaria bien que creara:
1 archivo de configuracion donde esten los datos de la base de datos
1 clase Modelo abstract que utilice ese archivo y cree, libere la conexion
1 clase que herede de la anterior para cada entidad de mi proyecto donde tengan los metodos necesarios para que realice consultas a la base de datos (controladorUsuario, controladorMensaje, etc)
Por ultimo el archivo .php donde utilice los objetos

Si es correcto lo anterior, estaria mal que dentro de los controladores realice metodos con codigo html? los controladores solo deberian tener las consultas y aparte otras clases que sean las que dibujan el codigo html?

gracias
 

juanec27

Gamma
Programador
¡Usuario con pocos negocios! ¡Utiliza siempre saldo de Forobeta!
Desde
19 Mar 2011
Mensajes
207
Primero preferiria que utilices un framework como Code Iginiter pues ahora ya casi nadie hace todos sus archivos desde 0, bajo ciertas exepciones. Vas a ver que te ahorraras tiempo y lo amaras o querras crecer despues... yo ya no hago PHP pero yo usaba ese y considero usar en un futuro Laravel.

Si aun asi insistes yo haria lo siguiente

Una clase de BD que me permita hacer las consultas basicas y de tal forma que yo pueda pasarle parametros y usarla en cualquier tabla ... seria un unico modelo x ejemplo

Clas de BD metodo select *

PHP:
function get_all(table, row, value){
  "select * from" + table + "where" + row + "=" + value
....
}

Si te das cuenta esta funcion serviria para regresar todos los datos de una tabla cuyo campo coincida con el valor que le pases.... pero es x esto que te digo que mejor ya te pases a un framework xke aqui tendrias que crear una funcion para cada caso... que tal si necesitas validar mas de un campo... haces otra funcion que te permita eso... ahora solo quieres ciertos campos... haces otra que te permita.... dependera de ti como pasar los parametros y manejar los campos, etc.... pero va a llegar un punto que sera muy complicado y lioso de mantener

A lo segundo, los controladores generalmente usan los modelos para crear objetos de datos que se pasan a las vistas... yo no recomendaria usar los controladores para imprimir o generar directamente codigo HTML pues se pierde el sentido del MVC y eso solo lo hacen los novatos.

No pretendo que cambies tu punto de vista y mucho menos dejaras de usar la POO pero si te interesa hacemos una charla x skype o lo que quieras para resolver tus dudas....
 

victorvu

Beta
Programador
¡Usuario con pocos negocios! ¡Utiliza siempre saldo de Forobeta!
Desde
24 Feb 2013
Mensajes
118

Me ayudaron muchisimo tus comentarios

Gracias a todos los que me ayudaron ;D