PHP 6 profesional escrito por Ed lecky tompson Con Steveen D y Thomas Myer, y trata de php6 y los objetos, el cual uno de sus ejemplos este :
Código PHP:
<?php header('Content-Type: text/html; charset=UTF-8');
interface BANDA {
public function obtNombre();
public function obtGenero();
public function agrMusico(MUSICO $musico);
public function obtMusicos();
}
interface MUSICO {
public function agrIstrumento(INSTRUMENTO $instrumento);
public function obtInstrumentos();
public function enBanda(BANDA $banda);
public function obtTipoMusico();
}
interface INSTRUMENTO {
public function obtNombre();
public function obtCategoria();
}
//////
class guitarrista implements MUSICO {
private $nombre;
private $apellido;
private $tipoMusico;
private $instumentos;
private $bandaReferencia='';
function __contrunct($nombre, $apellido) {
$this->apellido=$apellido;
$this->nombre=$nombre;
$this->instumentos=array();
$this->tipoMusico='guitarrista';
}
public function obtNombre(){return $this->nombre.' '.$this->apellido;}
public function agrIstrumento(INSTRUMENTO $instrumento){array_push($this->instumentos,$instrumento);}
public function obtInstrumentos(){return $this->instumentos;}
public function obtBanda(){return $this->bandaReferencia;}
public function agrTipoMusico($tipoMusico){$this->tipoMusico=$tipoMusico;}
public function enBanba(BANDA $banda){$this->bandaReferencia=$banda;}
public function obtTipoMusico(){return $this->tipoMusico;}
} // [B]linea 38 es esta[/B]
class jefeGitarrista extends guitarrista {
function __contrunct($nombre,$apellido) {
parent::__contrunct($nombre,$apellido);
$this->agrTipoMusico("jefe gitarrista");
}
}
class bandaRock implements BANDA {
private $musicos,$nombreBanda,$bandaGenero;
function __construct($nombreBanda){
$this->nombreBanda=$nombreBanda;
$this->musicos=array();
$this->bandaGenero="rock";
}
public function agrMusico(MUSICO $musico){
array_push($this->musicos,$musico);
$musico->enBanda($this);
}
public function obtMusicos(){return $this->musicos;}
public function obtNombre(){return $this->nombreBanda;}
public function obtGenero(){return $this->bandaGenero;}
}
class guitarra implements INSTRUMENTO {
private $itrNombre,$itrCategoria;
function __construct($instrumentoNombre){
$this->itrNombre=$instrumentoNombre;
$this->itrCategoria='guitarra';
}
public function obtNombre(){return $this->itrNombre;}
public function obtCategoria(){return $this->itrCategoria;}
}
//>> USO
// fija valores
$losInormatiros = new bandaRock('Los Informaticos');
$alberto = new guitarrista('Alberto','Ramirez');
$mario = new guitarrista('Mario','Ramon');
$alberto->agrIstrumento(new guitarra('Gibson Les Paul'));
$mario->agrIstrumento(new guitarra('Fender Stratocaster'));
$mario->agrIstrumento(new guitarra('Hondo H-77'));
$losInormatiros->agrMusico($mario);
$losInormatiros->agrMusico($alberto);
// obtiene valores
var_dump($losInormatiros->obtMusicos()); // ver que hay aki antes de entrar en el foreach
foreach($losInormatiros->obtMusicos() as $musico){
//echo 'Musico: '.$musico->nombre().'<br>';
}
echo '<hr>';
/* */
?>
bien. La consulta es que en el ejemplo anterior, en el var_dump, tendria que darme el contenido de los músicos, pero por el contrario me sale este mensaje:
Código:
por lo cual no comprendo dad que esta exactamente como el ejemplo, Fatal error: Class guitarrista contains 1 abstract method and must therefore be declared abstract or implement the remaining methods (MUSICO::enBanda) in E:\miServidor\wb\php6\tes_musica.php on line 38
pienso que es por la versión de php ya que el elejmplo estara en la 6ta y mi version es 5.3.8, o el contains 1 abstract method que dice un método abstracto ?¿
como solucionar este problema