Foros del Web » Programando para Internet » PHP »

Clases en php

Estas en el tema de Clases en php en el foro de PHP en Foros del Web. Buenos dias, miren ahora estamos trabajando con POO en php y claro, vengo de C++ y el cambio de lenguaje me esta costando un poco. ...
  #1 (permalink)  
Antiguo 18/01/2012, 06:04
 
Fecha de Ingreso: septiembre-2011
Mensajes: 87
Antigüedad: 13 años, 2 meses
Puntos: 6
Clases en php

Buenos dias, miren ahora estamos trabajando con POO en php y claro, vengo de C++ y el cambio de lenguaje me esta costando un poco. Me suele pasar.

El ejercicio consta de una tabla departamento(id,nombre), empleado(id,nombre,dept), proyecto(id,nombre_proyecto) y proyecto_empleado(id_proyecto i id_empleado). Tengo que insertar usuarios a la BBDD, primeramente creo un objeto Empleado, lo guardo en una session array para luego visualizarlo por pantalla y lo inserto en la BDDD.

El problema es el siguiente: tengo la clase empleado:

Código PHP:
Ver original
  1. <?php
  2. class Empleat{
  3.  
  4.     var $_codi;
  5.     var $_nom;
  6.     var $_dept;
  7.    
  8.     public function __construct($xcodi, $xnom, $xdept){
  9.         $this->_codi=$xcodi;
  10.         $this->_nom=$xnom;
  11.         $this->_dept=$xdept;
  12.     }
  13.     function getCodi(){
  14.         return $this->_codi;
  15.     }
  16.     function getNom(){
  17.         return $this->_nom;
  18.     }
  19.     function getDept(){
  20.         return $this->_dept;
  21.     }
  22.     function guardarBd(){
  23.         $xcodi= $this->getCodi();
  24.         $xnom= $this->getNom();
  25.         $xdept= $this->getDept();
  26.         mysql_query("insert into empleat values($xcodi,'$xnom',$xdept)");
  27.     }
  28. }
  29. ?>
Aqui les dejo el indice.php

Código PHP:
Ver original
  1. <?php
  2. require 'conexio.php';
  3. require 'class_empleat.php';
  4.  
  5. if(isset($_POST['enviar'])){
  6.  
  7.     $codi=$_POST['codi'];
  8.     $nom=$_POST['nom'];
  9.     $dept=$_POST['dept'];
  10.    
  11.     $e = new Empleat($codi,$nom,$dept);
  12.     $t[count($t)]=$e;
  13.     $_SESSION['empleats']=$t;
  14.     $e->guardarBd();
  15. }
  16. ?>
  17. <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
  18. <html>
  19. <head>
  20. <title>Documento sin t&iacute;tulo</title>
  21. <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
  22. </head>
  23.  
  24. <body>
  25. <form action="index.php" method="post">
  26.     Codi: <input name="codi" type="text">
  27.     Nom: <input name="nom" type="text">
  28.     Departament: <input name="dept" type="text">
  29.     <input name="enviar" type="submit" value="Enviar">
  30. </form>
  31. </body>
  32. </html>

El verdadero problema esta cuando el profe me dice que a los proyectos les tengo que asignar empleados y/o cambiarlos. Hay me quedo bloqueado. Tengo que crear una clase proyectos?

La explicacion del profe fue: habra un fomrulario con todos los proyectos, al seleccionar uno, mostrara todos su empleados que se podran eliminar de la lista y insertar mas. Pero mi problema esta en que no se ver el como hacerlo con clases, sin clases es muy facil.

Luego tengo que mostrarlo todo. Aqui tengo el mimso problema, mi solucion seria hacer un select de proyecto_empleado, y mediante el select crear un objeto, eso se puede hacer?

En serio tengo muchas dudas sobre POO en php, y en C++ no, C++ aprobe y lo entiendo a la perfección.
  #2 (permalink)  
Antiguo 18/01/2012, 07:42
Avatar de mayid
Colaborador
 
Fecha de Ingreso: marzo-2009
Ubicación: BsAs
Mensajes: 4.014
Antigüedad: 15 años, 8 meses
Puntos: 101
Respuesta: Clases en php

Hola. Yo no estoy mucho más avanzado que vos, pero sí creo que estaría bueno tener una clase "proyectos". En esa clase podes tener metodos como empleadosPorProyecto($id) y cosas así. Creo que la clave está en crear buenos métodos. Pero como te digo, doy por sentado que se necesitan dos clases.
  #3 (permalink)  
Antiguo 18/01/2012, 08:09
 
Fecha de Ingreso: noviembre-2011
Mensajes: 7
Antigüedad: 13 años
Puntos: 1
Respuesta: Clases en php

Te recomendaria que revisaras algo de ORM(Object-Relational Mapping), es una tecnica de programacion para hacer un mapeo entre un sistema orientado a objetos y una base de datos relacional, una de las cosas claves aqui es que todas las tablas de la base de datos son una clase en tu modelo de datos POO.
  #4 (permalink)  
Antiguo 18/01/2012, 08:23
Avatar de miguec04  
Fecha de Ingreso: agosto-2008
Ubicación: Cimitarra, Santander
Mensajes: 378
Antigüedad: 16 años, 3 meses
Puntos: 15
Respuesta: Clases en php

Código PHP:
Ver original
  1. class Empleat{
  2.     private $conexion;
  3.     private $_codi;
  4.     private $_nom;
  5.     private $_dept;
  6.    
  7.     public function __construct($xcodi, $xnom, $xdept){
  8.         $this->_codi=$xcodi;
  9.         $this->_nom=$xnom;
  10.         $this->_dept=$xdept;
  11.     }
  12.  
  13.    public function setConexion($conexion) {
  14.       $this->conexion  = $conexion;
  15.   }
  16.  
  17.     function getCodi(){
  18.         return $this->_codi;
  19.     }
  20.     function getNom(){
  21.         return $this->_nom;
  22.     }
  23.     function getDept(){
  24.         return $this->_dept;
  25.     }
  26.     function guardarBd(){
  27.         $xcodi= $this->getCodi();
  28.         $xnom= $this->getNom();
  29.         $xdept= $this->getDept();
  30.         mysql_query("insert into empleat values($xcodi,'$xnom',$xdept)",$this->conexion);
  31.     }
  32. }

Lo primero es que por principio los atributos deben ser o privados o protegidos, protegidos cuando se hereden.

lo siguiente, yo veo que haces el mysql_query pero nunca envias la conexion a la clase para ejecutarla entonces creé un atributo conexion donde por parametro la asignare y poder ejecutar la sentencia.

Código PHP:
Ver original
  1. //no se que tenga aqui en este archivo asi que pienso que trae una funcion llamada conexion(), espero ayudarte con eso.
  2. require 'conexio.php';
  3. require 'class_empleat.php';
  4.  
  5. if(isset($_POST['enviar'])){
  6.  
  7.    //no se como abre la conexion pero pienso que es de alguna de estas maneras
  8.   $conexion = conexion();
  9.  
  10.     $codi=$_POST['codi'];
  11.     $nom=$_POST['nom'];
  12.     $dept=$_POST['dept'];
  13.    
  14.     $e = new Empleat($codi,$nom,$dept);
  15.  
  16.     $e->setConexion($conexion);
  17.  
  18.     if(empty($_SESSION['empleats'])) {
  19.      $_SESSION['empleats'] = array();
  20.    }
  21.     $_SESSION['empleats'][]=$e;
  22.     $e->guardarBd();
  23. }

lo siguiente es que debe abrir la conexión en algún lado, no veo donde lo hizo, doy un ejemplo de como yo lo hubiese podido hacer.

otra cosa importante, por principio, el nombre de la clase debe ser el mismo del nombre del archivo, como para que sea mas entendible, mas practico, mas usable.

espero haber ayudado, cualquier cosa estoy pendiente de la respuesta.
__________________
Desoftc Technology - Miguel Carmona
Creaciones Inteligentes - Cimitarra Colombia
[email protected]
http://www.desoftc.com.co

Etiquetas: clases, html, mysql, tabla, usuarios
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 21:48.