Ver Mensaje Individual
  #13 (permalink)  
Antiguo 29/03/2005, 08:58
Avatar de sism82
sism82
 
Fecha de Ingreso: octubre-2003
Ubicación: Guadalajara
Mensajes: 865
Antigüedad: 21 años, 3 meses
Puntos: 1
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