Ver Mensaje Individual
  #26 (permalink)  
Antiguo 30/03/2005, 19:01
Avatar de jpinedo
jpinedo
Colaborador
 
Fecha de Ingreso: septiembre-2003
Ubicación: Lima, Perú
Mensajes: 3.120
Antigüedad: 21 años, 3 meses
Puntos: 41
Bueno... creo que por ahí va la solución.
Supongo que lo que habrá que hacer es no sólo referenciar la variable "content" (que en fpdf debe ser "buffer" si no me equivoco), sino todos los atributos del padre.
Con esto estaríamos haciendo que todas las extensiones actúen sobre las mismas variables.
Como les dije, no puedo hacer pruebas... pero tal vez se puedan utilizar funciones como get_class_vars(). Aquí he reescrito la clase de sism82 para que se pueda utilizar con PHP4 y le he agregado la parte que refreencia a todos los atributos comunes. No sé si funcione.
Código PHP:
class FpdfExtensionsHandler
    var 
$_extensions_dir    'path/al/directorio/de/las/clases_extensiones/'
    var 
$extensions            = array();
    var 
$vars_ref            = array(); // Contiene referencias a los atributos comunes.
    
var $extension            null;

    
/** 
    * @return Bool 
    * @param String $ExtensionName 
    */ 
    
function LoadExtension($ExtensionName){
        
$extension_path $this->_extensions_dir.$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 sus atributos
            
$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 
            // Primero capturamos todos los atributos definidos en la clase.
            
$class_vars get_class_vars($ExtensionName);
            if (
$share_content){ 
                 
//todas las instancias trabajaran sobre los mismos atributos comunes
                
foreach($this->vars_ref as $var_name => $var_value){
                    if(
array_key_exists($var_name$class_vars))
                        
$this->extension->$var_name = & $this->vars_ref[$var_name];
                }
            }else{
                
//de otra forma se inicializan las referencia a los atributos
                
foreach ($class_vars as $var_name => $var_value){
                    
$this->vars_ref[$var_name] = & $this->extension->$var_name;
                }
            }
            return 
true;
        }else{
            return 
false;
        }
    }
    
    
/**
     * @return Bool
     * @param String $ExtensionName
     */ 
    
function SetExtension($ExtensionName){
        if ( 
array_key_exists($ExtensionName,$this->extensions) ){
            
$this->extension =& $this->extensions[$ExtensionName];
            return 
true;
        }else{
            return 
false;
        }
    }

Saludos