Foros del Web » Programando para Internet » PHP »

autoload en php4

Estas en el tema de autoload en php4 en el foro de PHP en Foros del Web. Hola ^^ Hoy vengo con ganas de hacer una contribución hum! Empecé oop gracias a un amigo del foro Fransisco01, y hace poco me presentó ...
  #1 (permalink)  
Antiguo 05/08/2007, 17:18
Avatar de geq
geq
 
Fecha de Ingreso: agosto-2006
Ubicación: Rosario
Mensajes: 655
Antigüedad: 17 años, 8 meses
Puntos: 22
Sonrisa autoload en php4

Hola ^^
Hoy vengo con ganas de hacer una contribución hum!

Empecé oop gracias a un amigo del foro Fransisco01, y hace poco me presentó la función autoload. Resulta que cuando la quiero poner en práctica en un proyecto (para un cliente) me hacen desarrollar en un host con php4..

Entiendo que ya nadie lo quiere, pero parece que a algunos les cuesta actualizarse jaja asi que desarrollé esta función alternativa que la comparto para aquellos que se encuentren en una situación similar x) como para salir del apuro..

Jaja, aquí va ^^
Código PHP:
$documentroot $_SERVER['DOCUMENT_ROOT'];
if(
substr($documentroot,strlen($documentroot)-1,1)!="/"$documentroot.="/";
define("ROOT",$documentroot,1);
    
define("CLASSES_PATH","op/classes/",true);
define("CLASSES_PREFIX","class.",true);

function 
_new() {
    
$args func_get_args();
    
$count count($args);
    if(!
$args || $count<1) { return false; break; }
    
$class $args[0];
    
$file ROOT.CLASSES_PATH.CLASSES_PREFIX.$class.".php";
    
$class_args="";
    if(
file_exists($file)) {
        require_once(
$file);
        if(
$args>1) {
            
$class_args.="(";
            for(
$i=1;$i<$count;$i++) {
                
$aarg $args[$i];
                if(
is_object($aarg)) { 
                    
$p="obj$i"; $$p=$aarg;
                    
$class_args.="\$$p,";
                } elseif(
is_array($aarg)) {
                    
$p="arr$i"; $$p=$aarg;
                    
$class_args.="\$$p,";
                } else {
                    
$class_args.=is_int($aarg)?"$aarg,":"'$aarg',";
                }
            }
            
$class_args trim($class_args,",");
            
$class_args.=")";
        }
        eval(
"\$res = new $class$class_args;");
        return 
$res;
    } else { return 
false; }

Su forma de utilización es sencilla (y evidente):
Código PHP:
$objeto _new(nombre_de_la_claseparametroparametro, ...); 
Es posible especificar como parámetro un string, numérico, función array u otros objetos.

Espero que sea útil ^^
Gracias.

Exitos.
  #2 (permalink)  
Antiguo 05/08/2007, 18:05
Avatar de kaninox  
Fecha de Ingreso: septiembre-2005
Ubicación: In my House
Mensajes: 3.597
Antigüedad: 18 años, 7 meses
Puntos: 49
Re: autoload en php4

hay muchos que sigen en php4 asi que bienvenido sea el aporte :)
__________________
Gokuh Salvo al mundo. PUNTO!!!!
  #3 (permalink)  
Antiguo 05/08/2007, 18:09
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 17 años, 10 meses
Puntos: 2135
Re: autoload en php4

mmm solo te faltaria en dado caso regresar el parametro por referencia (usando el operador &, o en su caso usar $objeto =& _new.

Ahora esto no es __autoload, ya que aun asi tienes que llamar a la funcion, pero si sirve si no haz cargado la clase antes de querer intentar utilizarla.

Buen aporte.
Saludos.
  #4 (permalink)  
Antiguo 05/08/2007, 18:11
Avatar de geq
geq
 
Fecha de Ingreso: agosto-2006
Ubicación: Rosario
Mensajes: 655
Antigüedad: 17 años, 8 meses
Puntos: 22
Re: autoload en php4

Cita:
Iniciado por GatorV Ver Mensaje
mmm solo te faltaria en dado caso regresar el parametro por referencia (usando el operador &, o en su caso usar $objeto =& _new.

Ahora esto no es __autoload, ya que aun asi tienes que llamar a la funcion, pero si sirve si no haz cargado la clase antes de querer intentar utilizarla.

Buen aporte.
Saludos.
Bueno, en definitiva es esa la idea ^^ poder inicializar una clase sin tener que incluir el script que la contiene, y que así se cargen sólo las clases que se utilizen en el script.

Gracias ^^

Exitos.
  #5 (permalink)  
Antiguo 05/08/2007, 20:19
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 17 años, 10 meses
Puntos: 2135
Re: autoload en php4

Gracias por tu aporte, como te digo solo era un tip lo de & debido a que en PHP4 no se acostumbra pasar los objetos por referencia.

Saludos.
  #6 (permalink)  
Antiguo 06/08/2007, 09:51
Avatar de geq
geq
 
Fecha de Ingreso: agosto-2006
Ubicación: Rosario
Mensajes: 655
Antigüedad: 17 años, 8 meses
Puntos: 22
Re: autoload en php4

Si x)
Me olvidé de poner que gracias por ello, y si puedes explicarlo, porque si bien conozco el funcionamiento del &, ignoro la utilidad o la ventaja de hacerlo en este caso ^^

Y quedaría:
Código PHP:
...
return &
$res;
... 
¿no?

Gracias!
Exitos ^_^
  #7 (permalink)  
Antiguo 06/08/2007, 09:54
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 17 años, 10 meses
Puntos: 2135
Re: autoload en php4

El uso de & es para pasar una variable por referencia y es porque en PHP4 al copiar un objeto $obj = $obj2; se hacia una copia completa (consumia muchos recursos de memoria), en cambio en PHP5 se cambio el modelo a copiar solo la referencia de la variable, con lo que $obj = $obj2 apuntan al mismo espacio en memoria.

Esto se hace muy eficiente ya que puedes pasar tu objeto sin preocuparte de estar haciendo y desgastando memoria.

Por ejemplo el ideal:
Código PHP:
function ObjSaluda( &$obj ) {
        
$obj->saluda();

Aqui pasamos $obj por referencia y llamamos a su metodo saluda lo que lo hace muy eficiente.

Saludos.
  #8 (permalink)  
Antiguo 06/08/2007, 10:01
 
Fecha de Ingreso: septiembre-2006
Mensajes: 64
Antigüedad: 17 años, 6 meses
Puntos: 2
Re: autoload en php4

Ya me puedo poner las pilas... he leido el post y no he entendido ni jota....
Jejeje. Me toy quedando lelo.

Un Saludo. :)
  #9 (permalink)  
Antiguo 06/08/2007, 10:09
Avatar de geq
geq
 
Fecha de Ingreso: agosto-2006
Ubicación: Rosario
Mensajes: 655
Antigüedad: 17 años, 8 meses
Puntos: 22
Re: autoload en php4

Bien, gracias ^_^

Exitos.
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 06:57.