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

Ayuda con esta clase

Estas en el tema de Ayuda con esta clase en el foro de Frameworks y PHP orientado a objetos en Foros del Web. Hola amigos: Si alguien me puede ayudar. Mi problema es que quiero hacer un clase que contenga, por un lado un arreglo de elementos, de ...
  #1 (permalink)  
Antiguo 10/02/2005, 06:13
Avatar de fabricioeche  
Fecha de Ingreso: enero-2003
Ubicación: Argentina
Mensajes: 126
Antigüedad: 22 años
Puntos: 1
Pregunta Ayuda con esta clase

Hola amigos:
Si alguien me puede ayudar. Mi problema es que quiero hacer un clase que contenga, por un lado un arreglo de elementos, de los cuales no sé cuántos son, y por el otro la cantidad de esos elementos.
es decir que la clase sería de la forma:

Código:
class Cola{
	var $elem;
	var $cant;

	function crear(){
	$this->$cant=0;
	}
	function vacia(){
	if ($this->$cant==0)
		return true;
		else return false;
	}
	function insertar($x){
	$this->$cant=$this->$cant+1;
	$num=$this->$cant;
	$this->$elem[$num]=$x;
	}
	function mostrar(){
	if ($this->vacia())
		echo "No existen elementos para mostrar<br>";
		else
		{
		for ($i=1;$i<$this->$cant;$i++)
		{
			echo $this->$elem[$i]."<br>";
		}//fin del for
		}
	}
}//fin del class
Luego creo la función crear() para incializar la cantidad de elementos. La función vacia() es para saber si está vacio el arreglo. Por último la función insertar no me está andando y cuando quiero mostrar los elementos lo hago de este modo:

Código:
$num=2;
$cola= new Cola;
$cola->crear();
for ($ii=0;$ii<3;$ii++)
{
$cola->insertar($num);
$num++;
}
echo "LISTO<br>";
$cola->mostrar();
Pero me muestra lo siguiente:

LISTO
4
4
4

Y debería mostrar
LISTO
2
3
4

¿Qué es lo que está mal? AYUDA por favor...
__________________
Fabro

Última edición por fabricioeche; 10/02/2005 a las 06:18
  #2 (permalink)  
Antiguo 10/02/2005, 06:20
Ex Colaborador
 
Fecha de Ingreso: junio-2002
Mensajes: 9.091
Antigüedad: 22 años, 6 meses
Puntos: 16
Hola,

No es $this->$cant, sino $this->cant, sin la segunda $. Lo mismo para el resto de accesos a las propiedades.

Luego tambien hay otras cosas de la logica de la clase que yo las haria de otra forma, como usar foreach, usar [] para insertar al final de la cola, etc.

Salduos.
__________________
Josemi

Aprendiz de mucho, maestro de poco.
  #3 (permalink)  
Antiguo 10/02/2005, 14:14
Avatar de fabricioeche  
Fecha de Ingreso: enero-2003
Ubicación: Argentina
Mensajes: 126
Antigüedad: 22 años
Puntos: 1
Gracias por tu ayuda. Me gustaría que me dijeras cómo hacerlo mejor ya que soy nuevo en esto y no entiendo cómo hacerlo bien.
__________________
Fabro
  #4 (permalink)  
Antiguo 10/02/2005, 15:30
 
Fecha de Ingreso: febrero-2004
Mensajes: 221
Antigüedad: 20 años, 10 meses
Puntos: 0
Si es una cola, por que no usar un array y shift/unshift?
  #5 (permalink)  
Antiguo 10/02/2005, 15:50
Avatar de fabricioeche  
Fecha de Ingreso: enero-2003
Ubicación: Argentina
Mensajes: 126
Antigüedad: 22 años
Puntos: 1
Ya lo arreglé

Ya lo pude arreglar. Usé lo siguiente y quedó de primera:

Código:
class Cola{
	var $elem=array();
	var $cant;

	function crear(){
	$this->cant=0;
	}
	function vacia(){
	if ($this->cant==0)
		return true;
		else return false;
	}
	function insertar($x){
	$this->cant=$this->cant+1;
	/*$num=$this->cant;
	$this->elem[$num]=$x;
	*/
	array_push($this->elem,$x);

	}
	function suprimir(&$x){
	if ($this->vacia())
		echo "No existen elementos para suprimir<br>";
		else {$x=array_shift ($this->elem);
		$this->cant--;
		}
		
	}
	function mostrar(){
	//echo "Total:".array_count_values($this->elem);
	if ($this->vacia())
		echo "No existen elementos para mostrar<br>";
		else
		{
		for ($i=0;$i<$this->cant;$i++)
		{
			//echo $this->elem[$i]."<br>";
			foreach( $this->elem[$i] as $valor )
			   echo "Valor: $valor<br>\n";

		}//fin del for
		}
	}
}//fin del class
//$num=2;
$num=array(55,20,10);
$cola= new Cola;
$cola->crear();
for ($ii=0;$ii<3;$ii++)
{
$cola->insertar($num);
$num++;
}
echo "LISTO<br>";
$cola->mostrar();
echo "SUPRIMIR <BR>";
$cola->suprimir($m);
echo "Elem. Suprimido: $m <br>";
echo "MOSTRAR<br>";
$cola->mostrar();
Y me quedó como yo quería.
Gracias a todos por colaborar.
__________________
Fabro
  #6 (permalink)  
Antiguo 10/02/2005, 15:52
Avatar de fabricioeche  
Fecha de Ingreso: enero-2003
Ubicación: Argentina
Mensajes: 126
Antigüedad: 22 años
Puntos: 1
Lo que estoy haciendo es una simulación de una estación de servicio y por eso necesitaba una cola.
__________________
Fabro
  #7 (permalink)  
Antiguo 12/02/2005, 16:35
 
Fecha de Ingreso: enero-2004
Mensajes: 235
Antigüedad: 21 años
Puntos: 0
Yo lo haria de esta manera.

Código:
<?php
class Cola{
    var $elem=array();

    // Devuleve el numero de elementos de la cola
    function vacia(){
       return (count($this->element)==0);
    }

    funcion elementos(){
        return (count($this->element));
    }

    // Inserta elemento al final de la cola y devuelve
    // el numero de elementos actuales en la cola
    function insertar($x){
        return (array_push($this->elem,$x));
    }

    // Quita elemento del principio de la cola y devuelve
    // dicho elemento.
    function suprimir(){
        return (array_shift ($this->elem));
    }

    // Lista el contenido de la cola, pasandole un string 
    // y un separador
    function mostrar($str,$sep){
        $out = NULL;           
        foreach ($this->elem as $val) {
            $out .= $str.$val.$sep;
        }
        return ($out);
    }
}


$num  = array(55, 20, 10);
$cola = new Cola();

foreach ($num as $val) {
    echo ('Insertado elemento núm '.$cola->insertar($val).' : '.$val.'<br />');
}
echo 'LISTO<br/>';
echo $cola->mostrar('Valor:',"<br />\n");

echo "SUPRIMIR <br />";
echo 'Elem. Suprimido: '.$cola->suprimir().'<br />';
echo "MOSTRAR<br />";
echo $cola->mostrar('Valor:',"<br/>\n");

?>
Y me quedó como tu lo neccesitas.

Última edición por jmaribau; 12/02/2005 a las 16:39
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 03:13.