<?php
abstract class Animal 
    {
        // Declaración de los atributos 
		private $color = "gris";
		private $peso = 10;
		
		//constantes de clase
		const PESO_LIGERO = 5;
		const PESO_MEDIO = 10;
		const PESO_ALTO = 15;

		
		// Declaración de la variable statique $contador
		private static $contador = 0;

				
		public function __construct($color, $peso) // Constructor pide 2 argumentos.
		{
            echo'Llamada del constructor.<br />'; 
            $this->color = $color; // Inicialización del color.
            $this->peso = $peso; // Inicialización del peso.
			
			self::$contador = self::$contador + 1;
		}
		
				
		//accesorios
		public function getColor()
		{
            return $this->color; //devuelve el color 
		}
		public function setColor($color)
		{
			$this->color = $color; //escribe en el atributo color
		}
		
		public function getPeso()
		{
            return $this->peso; //devuelve la peso 
		}
		public function setPeso($peso)
		{
			$this->peso = $peso; //escribe en el atributo peso
		}

	
		//métodos públicos
				
		public function comer_animal(Animal $animal_comido)
		{
			$this->peso = $this->peso + $animal_comido->peso;
			//el peso del animal comido y su color se ponen a 0
			$animal_comido->peso = 0;
			$animal_comido->color = "";
		}

		public static function se_mueve()
		{
			echo "El animal se desplaza.";           
		}
		
		public function añadir_un_kilo()
		{
			$this->peso = $this->peso + 1;
		}
		
		// Método estático que retoma el valor del contador
		public static function getContador() 
        {
            return self::$contador;
        }
		
		//código no implementado porque el  método es abstracto 
		abstract public function respira();			

}
?>
