Foros del Web » Programando para Internet » PHP » Frameworks y PHP orientado a objetos »

cambiar de estructurada a POO

Estas en el tema de cambiar de estructurada a POO en el foro de Frameworks y PHP orientado a objetos en Foros del Web. hola a todo, buenos tal ves soy muy preguntos, pero me interesa aprender, y pues soy novato, actualemnte estoy transformando las funciones estructuradas que uso ...
  #1 (permalink)  
Antiguo 24/10/2006, 22:34
 
Fecha de Ingreso: marzo-2004
Mensajes: 186
Antigüedad: 20 años, 1 mes
Puntos: 0
cambiar de estructurada a POO

hola a todo, buenos tal ves soy muy preguntos, pero me interesa aprender, y pues soy novato, actualemnte estoy transformando las funciones estructuradas que uso a poo y pues arme esta clase, solo que no la veo que se paresca a la POO, agradeceria si me podrian ayudar

Código PHP:
<?
    
class combobox
        
{
            public 
$sql;
            
            function 
__construct($table,$option,$value)
                {
                    
$this->table=$table;
                    
$this->option=$option;
                    
$this->value=$value;
                    
$sql "select * from ".$this->table;
                    
$this->sql=$sql;
                    
$result mysql_query($this->sql) or die (mysql_error());
                    
$this->result=$result;
                    echo 
"<select name='$this->table' class='botones'>";
                    while(
$fila mysql_fetch_assoc($this->result))
                        {
                            echo 
"<option value='$fila[$value]'>$fila[$option]</option>"
                        }    
                    echo 
"</select>"
                    
                    
mysql_close();

                }
        }
include(
"bd.php");
Conexion();
$test = new combobox("listas","producto","id_producto");
?>
Gracias de antemano a todos por sus respuestas, y espero no molestar
__________________
Software a Medida
voip Locutorios
  #2 (permalink)  
Antiguo 25/10/2006, 08:24
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 17 años, 11 meses
Puntos: 2135
La ventaja de usar POO es que puedes hacer las cosas mas separadas, o utilizar el ya famoso MVC, para separar lo que es la Vista (HTML) de el acceso a datos (PHP)

En si, si estas usando POO, pero no de la forma correcta, deberias de tener todo bien empacado y aislado es decir:
- Una clase ComboBox
- Una clase BD (llamada desde comboclass)
- Una clase Renderer (llamada desde tu comboclass) Para pasar de datos (un array) a un control HTML

Deberias de leer los libros de POO que hay para que te des una idea como debes de aislar todo tu codigo en objetos que se implementan unos a otros.
  #3 (permalink)  
Antiguo 25/10/2006, 08:31
 
Fecha de Ingreso: marzo-2004
Mensajes: 186
Antigüedad: 20 años, 1 mes
Puntos: 0
gracias por tu respuestas GatorV, si tienes razon mi implementacion tiene poco o nada de la estrctura logica de POO, esto es devido a que aunque tengo la logica relativamente clara, no tengo asi, claro algun ejemplo practico, para poder basarme en el, y partir de esa estrctura para estudiarla y empezar a trabajar mas como "deberia ser", agradeceria si alguien se toma la molestia de ayudarme a transformas mi clase en una clase real poo, de paso serviria de ejemplo para otros, gracias a todos por sus posibles respuestas y un saludo
__________________
Software a Medida
voip Locutorios
  #4 (permalink)  
Antiguo 25/10/2006, 08:52
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 17 años, 11 meses
Puntos: 2135
Pues para empezar puedes realmente romper tu "clase" en una clase con mas propiedades y metodos.

Código PHP:
class ComboBox {
      private 
$tabla;
      private 
$opcion;
      private 
$valor;
      private 
$datosCombo;

      public function 
__construct$tabla$opcion$valor ) {
            
$this->tabla $tabla;
            
$this->opcion $opcion;
            
$this->valor $valor;
            
$this->datosCombo = array();
      }

      public function 
setTabla$tabla ) {
            
$this->tabla $tabla;
      }

      public function 
getTabla() {
            return 
$this->tabla;
      }

      
// Aqui faltarian mas "setters" y "getters"

      
public function loadData() {          
             
$sql "SELECT * FROM " $this->table;
             
             
$conexion = new Conexion();
             
$conexion->Query$sql );
             
$data = array();
             while( 
$row $conexion->fetchRow() ) {
                   
// Aqui suponemos que tenemos dos valores del query
                   
$data[$row[0]] = $row[1];
             }
             
             
$this->datosCombo $data;
      }

      public function 
dibujaCombo() {
             
$html "<select name=\"%s\" class=\"botones\">%s</select>";
             
$opciones = array();
             
$opHTML "<option value=\"%s\"%s>%s</option>";
             foreach( 
$this->datosCombo as $value => $option ) {
                    
$selected '';
                    if( 
$value == $this->value $selected ' selected="';
                    
                    
$opciones[] = sprintf$opHTML$value$selected$option );
             }

              return 
sprintf$html$this->tableimplode"\n"$opciones ) );
      }

      public function 
__toString() {
             return 
$this->dibujaCombo();
      }

y lo puedes usar asi:
Código PHP:
$combo = new ComboBox"listas""producto""id_producto" );
$combo->loadData();
echo 
$combo// Esto llama el metodo de __toString() 
  #5 (permalink)  
Antiguo 25/10/2006, 10:41
 
Fecha de Ingreso: marzo-2004
Mensajes: 186
Antigüedad: 20 años, 1 mes
Puntos: 0
gracias GatorV tu como siempre respondiendo y teniendo una pacinecia increible, bueno me sirvio de mucho la clase que construiste y me hace ver lo mucho que me hace falta aprender, trate de hacer la estrcutura de la clase conexion a la que haces referencia pero parece que no funciona

Código PHP:
class Conexion  {
            private 
$servidor;
            private 
$usuario;
            private 
$password;
            private 
$sql;
            private 
$db;
            
            public function 
__construct($servidor,$usuario,$password,$db){
                    
$this->servidor=$servidor;
                    
$this->usuario=$usuario;
                    
$this->password=$password;                    
                    
$this->db=$db;
                    
$this->cadena_result=array();
                    
$this->cadena=array();
                                        
                    if (!(
$link =mysql_connect($this->servidor,$this->usuario,$this->password))){
                    
                            echo 
"Error conectandose a la base de datos.";
                            exit();
                    }
                
                    if (!
mysql_select_db($this->db,$link)){
                    
                            echo 
"Error seleccionando la base de datos.";
                            exit();
                    }
                
                    return 
$link;        
            }
      
            public function 
Query($sql){
                    
$this->cadena mysql_query($sql);
                    return 
$this->cadena;
                    
                
            }
            public function 
fetchRow() {
                    
$this->cadena_result mysql_fetch_assoc($this->cadena);
                    return 
$this->cadena_result;
        }
    

jejeje eso fue lo que logre, bueno no es nada bonito me deja lo mucho que me falta aprender, gracias gatorV por tus respuestas Saludos
__________________
Software a Medida
voip Locutorios
  #6 (permalink)  
Antiguo 25/10/2006, 11:49
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 17 años, 11 meses
Puntos: 2135
Creo es bueno que quieras romper con tus paradigmas de hacer las cosas a la antiguita por hacerlas ya de la forma moderna.

Esto te va a ayudar mucho cuando por decir quieras cambiarte a Java o a lenguajes de ese tipo, saludos!
  #7 (permalink)  
Antiguo 25/10/2006, 19:33
 
Fecha de Ingreso: marzo-2004
Mensajes: 186
Antigüedad: 20 años, 1 mes
Puntos: 0
Gracias GatorV por tu ayuda bueno despues de estudiar y tratar de meter las ideas que me has dado y estructurarlas, e creado una clase creo que lo mas cercana posible a una clase "normal", aunque aun le falta, me gustaria una opinion para saber por donde toy que le fallo y por donde voy bien, gracias a todos por las posibles respuestas que coloquen y gracias a GatorV por su infinita paciencia

Este es el Codigo:

Código PHP:
class content
{
        
        public 
$direccion;
        public  
$expresion;
        protected 
$salida;
        protected 
$cadena;
        protected 
$url;
        protected 
$valor;
        protected 
$result;
        protected 
$out;

        function 
__construct($direccion)
            {
                
                
$this->direccion=$direccion;
                
$this->expresion=$expresion;
                
$this->valor=$valor;
                
$this->url=$url;
                
$this->result=$result;
                
$this->out=$out;
                
                
                
$this->expresion="#content=\"(.*?)\"#i";
                
$this->valor="iso";
            }        
        function 
verify()
        {                    
                
$this->url=fopen($this->direccion"r");
                if (!
$this->url
                {
            echo 
"<p>Erro pagina inexistente.\n";
            exit;
                }
                
$this->display();
        }    
        function 
display()
        {        
                while (!
feof ($this->url)) 
                    {
                        
$this->result fgets ($this->url8000);                    
                        if (
preg_match_all($this->expresion$this->result$this->out))
                                {    
                                        if (!
strpos($this->out[1][0],$this->valor))
                                                {
                                                        echo 
$this->out[1][0];
                                                        echo 
"\n";
                                                        echo 
"<br>";
                                                }    
                                }
                    }
                
fclose($this->url);    

        }
    }

    

        
$contenido = new content("http://www.peru.com");
        
$contenido->verify(); 
__________________
Software a Medida
voip Locutorios
  #8 (permalink)  
Antiguo 25/10/2006, 20:34
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 17 años, 11 meses
Puntos: 2135
El unico problema que yo le veo es en el metodo verify, porque? las clases no deberian nunca terminar la ejecucion de un script, a menos que le sea pedido (o mejor lanzar una excepcion:
Código PHP:
public function verify() {
         
$this->url=fopen($this->direccion"r");
         if (!
$this->url
         {
               throw new 
Exception"Pagina no existente, o no contactable" );
         }
         
$this->display(); 

  #9 (permalink)  
Antiguo 25/10/2006, 21:27
 
Fecha de Ingreso: marzo-2004
Mensajes: 186
Antigüedad: 20 años, 1 mes
Puntos: 0
gracias algo nuevo se aprende siempre, la clase funciona bien pero en mi editor me corre bien, pero en la parte inferior me avisa esto:

Notificación: D:\servidor\clases1\href2.php línea 99 - Undefined variable: expresion
Notificación: D:\servidor\clases1\href2.php línea 100 - Undefined variable: valor
Notificación: D:\servidor\clases1\href2.php línea 101 - Undefined variable: url
Notificación: D:\servidor\clases1\href2.php línea 102 - Undefined variable: result
Notificación: D:\servidor\clases1\href2.php línea 103 - Undefined variable: out

Aunque corre, normal, pero dime eso ha que se deve, alguna parte que no esta donde deveria, disculpa la persistencia, pero me gusta aprender, y entender para poder mejorar y despues yo tambien poder ayudar
__________________
Software a Medida
voip Locutorios
  #10 (permalink)  
Antiguo 26/10/2006, 10:12
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 17 años, 11 meses
Puntos: 2135
Se debe a que esas variables no las definiste antes de utilizarlas, como el ejemplo de $this->expresion = $expresion; $expresion no tiene ningun valor anterior por lo cual te tira ese error.

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 02:37.