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

Empezando con objetos

Estas en el tema de Empezando con objetos en el foro de Frameworks y PHP orientado a objetos en Foros del Web. Que tal, toda mi vida he programado PHP estructurado, de objetos no tengo ni remota idea en realidad, pero llevo una semana trabajando con PHP-GTK ...
  #1 (permalink)  
Antiguo 20/08/2007, 12:08
 
Fecha de Ingreso: septiembre-2002
Ubicación: México
Mensajes: 356
Antigüedad: 21 años, 7 meses
Puntos: 0
De acuerdo Empezando con objetos

Que tal, toda mi vida he programado PHP estructurado, de objetos no tengo ni remota idea en realidad, pero llevo una semana trabajando con PHP-GTK por lo cual deberé iniciar con la POO.

El caso es que tengo unas funciones que muy seguido utilizo y me ayudan bastante para ahorrar tiempo y codigo, ahora las quiero pasar formar parte de una clase y espero puedan ayudarme.

Las funciones reciben parametros para construir un elemento <select> de html, ya sea desde una consulta a base de de datos, como de un arreglo. Ahora mismo los tengo así:

Código PHP:
function impSelectArray($nombre,$extra,$select,$inicial,$arreglo)
{
    echo 
'<select id="'.$nombre.'" name="'.$nombre.'"  '.$extra.' >';
    
    if(
$select == -99)
        echo 
'<option value="-99" SELECTED>'.$inicial.'__</option>';

          
    foreach(
$arreglo as $valor => $etiqueta)
    {
        if(
is_array($select) && in_array($valor,$select))
                echo 
'<option value="'.$valor.'" SELECTED>'.htmlentities($etiqueta).'</option>';    
        else if(
$valor == $select)
            echo 
'<option value="'.$valor.'" SELECTED>'.htmlentities($etiqueta).'</option>';
        else
            echo 
'<option value="'.$valor.'">'.htmlentities($etiqueta).'</option>';
    }
    echo 
"</select>";

ese es el que lo imprime desde un arreglo, el de base de datos es muy parecido, solamente que primero ejecuta el query y despues entra en un ciclo que va llenando los <option>.

Esto que les pongo debajo que tan alejado de la realidad está para convertirlo en clase?

Código PHP:
class comboHtml
{
    public 
$nombre '';
    public 
$id $nombre;
    public 
$extra '';
    public 
$inicial '';
    public 
$slqQuery '';
    public 
$select '';
    public 
$arreglo = array();
    
    public function 
fillFromDataBase($nombre,$qry,$select,$extra,$inicial)
    {
        
$this->nombre $nombre;
        
$this->extra $extra;
        
$this->inicial $inicial;
        
    }
    
    public function 
fillFromArray($nombre,$arreglo,$select,$extra,$inicial)
    {
        
$this->arreglo $arreglo;
        
$this->nombre $nombre;
        
$this->extra $extra;
        
$this->inicial $inicial;
        
        echo 
'<select id="'.$nombre.'" name="'.$nombre.'" '.$extra.' class="navLink">';
    
        if(
$select == -99)
            echo 
'<option value="-99" SELECTED>'.$inicial.'__</option>';
          
        foreach(
$arreglo as $valor => $etiqueta)
        {
            if(
is_array($select) && in_array($valor,$select))
                echo 
'<option value="'.$valor.'" selected>'.htmlentities($etiqueta).'</option>';    
            else if(
$valor == $select)
                echo 
'<option value="'.$valor.'" selected>'.htmlentities($etiqueta).'</option>';
            else
          echo 
'<option value="'.$valor.'">'.htmlentities($etiqueta).'</option>';
        }
        echo 
"</select>";
    }    

De momento estoy intentando hacer funcionar el que los llena desde un arreglo, espero me puedan dar una idea de lo que estoy haciendo mal o bien.

Saludos!!

Última edición por yacatl; 20/08/2007 a las 12:11 Razón: Esto vá en POO. Espero el moderador pueda ayudarme , sé que es una molestia y les ofrezco disculpas.
  #2 (permalink)  
Antiguo 29/08/2007, 00:11
Avatar de nachopro  
Fecha de Ingreso: noviembre-2003
Ubicación: Haedo, Bs. As.
Mensajes: 290
Antigüedad: 20 años, 5 meses
Puntos: 2
Re: Empezando con objetos

Mirá, ahí el problema radica en que estás creando una clase combo que contiene... nada

primero tendrías que crear una clase option del tipo:

Código PHP:
<?

class option
{
    private 
$valor;
    private 
$etiqueta// lo que va entre <option> y </option>

    
public function __construct($etiqueta$valor null)
    {
        
$this->etiqueta $etiqueta;
        if (!
is_null($valor))
        {
            
$this->value $valor;
        }
        else
        {
            
$this-value $this->etiqueta;
        }
    }

    public function 
leerEtiqueta()
    {
        return 
$this->etiqueta;
    }

    public function 
escribirEtiqueta($etiqueta)
    {
        
$this->etiqueta $etiqueta;
    }

    
// lo mismo para el $valor
}

?>
Y ahora deberías hacer una clase para el <select> así, que no sé si es la manera correcta:

Código PHP:
<?

class select
{
    private 
$nombre;
    private 
$opciones;

    public function 
__construct($nombre)
    {
        
$this->nombre $nombre;
        
$this->opciones = array();
    }

    public 
agregarOpcion($etiqueta$valor null)
    {
        
$this->opciones[] = new option($etiqueta$valor);
    }
}


?>
de todos modos, más que para practicar (cosa que también busco para aprender) creo que no tiene mucho sentido que digamos esto... pero que los que saben opinen y nos eduquen :)

saludos
  #3 (permalink)  
Antiguo 29/08/2007, 07:36
 
Fecha de Ingreso: noviembre-2003
Mensajes: 798
Antigüedad: 20 años, 5 meses
Puntos: 8
Re: Empezando con objetos

No tiene sentido tener una clase que imprima cadenas con echo y/o print, para eso se retorna el valor.

El ejemplo de nacho tiene más sentido, faltaría otra clase que utilice un objeto formSelect (desarrollar una clase formulario) y meter el contenido de la colección de objetos (option) que contiene la clase "select" de nacho... y una par de ajuste y listo.
  #4 (permalink)  
Antiguo 30/08/2007, 08:40
 
Fecha de Ingreso: septiembre-2002
Ubicación: México
Mensajes: 356
Antigüedad: 21 años, 7 meses
Puntos: 0
Re: Empezando con objetos

Muy bien amigos, muchas gracias. Yo sigo sin verle el sentido a los objetos, pero entiendo que debería haber una clase formulario con varios métodos en donde uno de ellos fuera el select.

Gracias nacho por tirarme un poco de código.

Saludos!!
  #5 (permalink)  
Antiguo 30/08/2007, 09:10
Avatar de nachopro  
Fecha de Ingreso: noviembre-2003
Ubicación: Haedo, Bs. As.
Mensajes: 290
Antigüedad: 20 años, 5 meses
Puntos: 2
Re: Empezando con objetos

Paciencia Yacatl.... cuesta horrores salirse de la programación procedimental...

yo recién ayer vi contundentemente cómo hacer una pequeña tontería de programa con Objetos... y hace casi 2 meses que esto empecinado en aprender Objetos y esta semana terminé de leer por segunda vez el grandioso libro "Programación orientada a Objetos" de Carlos Fontela ;)

así que es cuenstión de darle tiempo... leer y reeleer y esperar a que el conocimiento en nuestra cabeza madure ;)
  #6 (permalink)  
Antiguo 30/08/2007, 09:15
 
Fecha de Ingreso: febrero-2001
Mensajes: 1.374
Antigüedad: 23 años, 2 meses
Puntos: 11
Re: Empezando con objetos

Quien es Carlos Fontela? No lo conozco..


[edito] Recien me fije en google, un docente de la UBA.
  #7 (permalink)  
Antiguo 30/08/2007, 09:36
 
Fecha de Ingreso: noviembre-2003
Mensajes: 798
Antigüedad: 20 años, 5 meses
Puntos: 8
Re: Empezando con objetos

Cita:
Iniciado por yacatl Ver Mensaje
Muy bien amigos, muchas gracias. Yo sigo sin verle el sentido a los objetos, pero entiendo que debería haber una clase formulario con varios métodos en donde uno de ellos fuera el select.

Gracias nacho por tirarme un poco de código.

Saludos!!
La idea es implementar un conocido y más utilizado patrón de diseño Factory (fabrica de objeto), luego necesitamos una clase padre FormElement (Super Clase Abstracta) que de una interfaz y herede algunos métodos y/o atributo en común a sus hijos (sub clases).

Bueno y quienes son sus hijos de la mencionada clase padre FormElement? buen punto, sus hijos serán las clases de elementos del formulario, de forma concreta, y éstas serían tantas clases hijas por elemento del formulario; text, file, texarea, select, radio, checkbox, submit, bottom, etc...
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 19:14.