MartinTandil: me parece perfecto, hacen falta proponer mas solcuciones para llegar a la ideal.
Cluster:
voila....... a riesgo de volver a equivocarme (ojalá mas gente aporte equivocaciones :p para estar mas cerca de encontrar la solución), creo que lo único que hace falta es que todas las instancias manipulen la misma variable "$content" del padre. Creo que se soluciona sencillamente con una referencia. Cluster, lo que propongo a continuación no es optimo, pero considerando que en php4 todas las variables son publicas, tal vez puedas hacer lo siguiente. Por favor, revisen el código para ver si me equivoco :p. Desde luego puede haber mas cosas que necesiten compartirse, como por ejemplo métodos, pero de eso no se sabrá hasta checar el código de las extensiones.
Código PHP:
$pdf_extension_handler->LoadExtension('ClasePadre');
$pdf_extension_handler->LoadExtension('ClaseHijaUno');
$pdf_extension_handler->LoadExtension('ClaseHijaDos');
ahora bien, ya tenemos 3 instancias separadas. Suponiendo que la variable que deben compartir es ClasePadre::$Content, se podría tal vez hacer esto ??? la importancia radica en el método LoadExtension...
Código PHP:
final class FpdfExtensionsHandler
{
const HANDLERS_DIRECTORY = 'path/al/directorio/de/las/clases_extensiones/';
private $extensions = array();
private $content_reference = null;
public $extension = null;
public function __construct()
{
return true;
}
/**
* @return Bool
* @param String $ExtensionName
*/
public function LoadExtension($ExtensionName)
{
$extension_path = self::HANDLERS_DIRECTORY.$ExtensionName
if ( file_exists($extension_path) && !class_exists($ExtensionName) )
{
include_once($extension_path);
$share_content = empty($this->extensions) ? false : true; //si ya se cargo un objeto, se debe compartir la variable content
$this->extensions[$ExtensionName] = new $ExtensionName();
$this->extension =& $this->extensions->[$ExtensionName]; //se genera una referencia al ultimo objeto instanciado
//si se debe compartir el contenido, se reescribe la variable content del recien instanciado objeto
if ( $share_content )
{
//todas las instancias trabajaran sobre la misma referencia a content
$this->extension->content =& $this->content_reference;
}
else //de otra forma se inicializa la referencia a content
{
$this->content_reference = $this->extension->content;
}
return true;
}
else
{
return false;
}
}
/**
* @return Bool
* @param String $ExtensionName
*/
public function SetExtension($ExtensionName)
{
if ( array_key_exists($ExtensionName,$this->extensions) )
{
$this->extension =& $this->extensions[$ExtensionName];
return true;
}
else
{
return false;
}
}
}
ah por cierto, sorry, lo quitale las palabras de visibilidad a las variables y metodos (public, private etc), la costumbre :)