buenas, estaba leyendo un libro de PHP llamado
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>';
/* */
?>
se de PHP pero de objetos con php no tanto por eso me intereso este libro,
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:
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
por lo cual no comprendo dad que esta exactamente como el ejemplo,
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