Bueno, no voy a citar nada de lo expuesto porque quiero empezar de cero... además,
casi que no te tomaste el tiempo para hacer una exposición simple y clara de tu duda, lo cual casi me da la misma pereza para leerte.
Vamos a los conceptos,
el código -estimado haragán- se saca razonando (lo único que espero y rezo a todos los demonios es que no nos estés pasando tareas de estudio a los colegas de la lista).
Aquí, como siempre se repite en esta lista,
el problema no es de código, es de conceptos y de ser obstinados en no razonar y esperar que te den la comida regurgitada.
¿Sabes por qué te lo digo?
El método "prueba y error" es sinónimo de desorden, falta de metodología, de razonamiento, lo cual cada cosa que intentes te llevará mucho más tiempo que si te sientas a razonarlo por un buen rato.
Por ejemplo, me imagino que todos los "id" que colocas por todos lados los debes usar porque necesitas una correspondencia con un modelo "relacional" (bases de datos) y no porque son necesarios para trabajar con objetos. Ahora bien, razonando, no veo en ningún momento que hables de bases de datos, por lo tanto para simplificar el ejemplo y concentrarnos en los conceptos de la POO debes eliminar los "id".
Código PHP:
<?php
class Proyecto{
private $descripcion;
public function __construct( $descripcion ){
$this->descripcion = $descripcion;
}
public function getDescripcion(){ return $this->descripcion; }
}
class JefeProyecto{
private $nombre;
private $colProyectos = array();
public function __construct( $nombre ){
$this->nombre = $nombre;
}
public function addProyecto( Proyecto $proyecto ){
$this->colProyectos[] = $proyecto;
}
public function listarProyectos(){
foreach( $this->colProyectos as $proyecto ){
$retorno .= $proyecto->getDescripcion() . " ";
}
return $retorno;
}
}
$jefe = new JefeProyecto( "Enrique" );
$jefe->addProyecto( new Proyecto("POO") );
$jefe->addProyecto( new Proyecto("Estructurado") );
echo $jefe->listarProyectos();
//var_dump( $jefe ); // Si quieres ver como está compuesto internamente
?>
Entiende el concepto: los objetos están compuestos por otros objetos, unos contienen a otros. Eso es agregación. Punto, no le des más vueltas.
PD: espero que no pierdas el tiempo en ofenderte por mi forma de expresarme, espero que valores la cruda y dura sinceridad de mi despiadado ser (y lo de "colaborador" es solo un error de sintaxis).