Que tal. Mmm es posible que no este viendo el problema. O bien, no explique bien el funcionamiento del código que puse anteriormente. No recuerdo del todo bien lo que puse pero la idea es sencilla. Los métodos a implementar, ya sea con php4 o php5 (da igual) son:
PdfExtensionHandler::LoadExtenstion($StringExtensi onName);
este método instanciaria dinamicamente las extensiones que desees utilizar, digamos que durante el proceso de una página vas a utilizar 3 extensiones, entonces llamas consecutivamente 3 veces:
Código PHP:
$pdf_extension_handler->LoadExtension('AlgunaExtension');
$pdf_extension_handler->LoadExtension('SegundaExtension');
$pdf_extension_handler->LoadExtension('TerceraExtension');
con eso, suponiendo que todo sale bien, se crean internamente las instancias de cada uno de las extensiones. Ahora, para utilizarlas, defines cual quieres usar con:
PdfExtensionHandler::SetExtension($StringExtension Name)
Que lo que hace es posicionar en la variable PdfExtensionHandler::$Extension, una referencia a la instancia de la extensión seleccionada.
Código PHP:
$pdf_extension_handler->SetExtension('SegundaExtension');
$pdf_extension_handler->extension->AlgunMetodoDeSegundaExtension();
$pdf_extension_handler->extension->OtroMetodoDeSegundaExtension();
$pdf_extension_handler->extension->TercerMetodoDeSegundaExtension();
En php 5 incluso pudieras ir un paso mas y omitir la variable interna $extension, e implementar el método mágico _call($MethodName), que basicamente es el punto donde todas las llamdas a un método no implementado serán dirigidas, entonces dentro de ese método mágico _call, tu harias la llamada a $this->extension->$MethodName($args); y de esa forma sería llamado el método del objeto al que este apuntando la referencia de $extension
este es un ejemplo de como uso esa función para desplegar un error de 'feature not supported'
Código PHP:
/**
* This function will work only in PHP5, catch all the undefined method calls.
* Previous versions drop a fatal error when an undefined method is called
* @date Jan/15/2005
* @return bool
* @param String CalledMethodName
* @param Array $Parameters
* @access magic
*/
function __call($CalledMethodName, $Parameters)
{
$error_arguments = array();
$error_arguments['method'] = $CalledMethodName;
return $this->HandleError(PDB_ERROR_FEATURE_NOT_SUPPORTED, $error_arguments);
}
Si no deseas o no puedes usar php5, pues entonces tendrás que hacer las llamadas a los métodos directamente usando la referencia $extension.
Que inconveniente existe con esta implementación?
La herencia multiple dudo que alguna vez vaya a ser implementada en php, en general he leído que no es recomendada, hace mas confusas las cosas, por ello Java se olvidó de usar la herencia multiple y a cambio hizo lo mas cercano que pudo con las interfaces.
espero haber sido mas explicito esta vez, saludos.
en este caso $Parameters no lo utilizo, pero es parte de la definición del método magico _call