PHP - function __autoload en php

 
Vista:
sin imagen de perfil

function __autoload en php

Publicado por Gustavo (4 intervenciones) el 05/03/2024 13:07:27
hola amigos, esta funcion esta obsoleta a, tengo entendido que se debe cambiar por spl_autoload_register , necesito ayuda para configurarla por favor.

function __autoload($class_name) {
$Registy = Registry::getInstance();
foreach($Registy->autoload['paths'] as $path) {
$filepath = $path . '/' . strtolower($class_name) . '.class.php';
// echo '<br> ---------------------------------------- $filepath '.$filepath;
if(is_file($filepath)) {
require_once $filepath;
break;
}else{
// echo '<br> ////////////////////////////////// ERROR ';
}
}
}



spl_autoload_register(function($class){
//
require_once($class.'.php');
});

$Second = new Second;
$Second->run_second();

$First = new First;
$First->run_first();
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de Mauro
Val: 2.761
Oro
Ha aumentado 1 puesto en PHP (en relación al último mes)
Gráfica de PHP

function __autoload en php

Publicado por Mauro (1036 intervenciones) el 06/03/2024 18:14:26
¿Qué problema estás encontrando?
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil

function __autoload en php

Publicado por Gustavo (4 intervenciones) el 13/03/2024 16:42:11
hola Mauro necesito configurar spl_autoload_register, no entiendo si el parametro debbe ser enviado al momento de invocarla y donde es
llamada
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Mauro
Val: 2.761
Oro
Ha aumentado 1 puesto en PHP (en relación al último mes)
Gráfica de PHP

function __autoload en php

Publicado por Mauro (1036 intervenciones) el 14/03/2024 09:21:07
La función que se pasa como parámetro (el callable) será invocada automáticamente por el intérprete cuando se encuentre una clase desconocida hasta el momento. En ese sentido, funciona igual que el viejo __autoload.

La diferencia es que con spl_autoload_register es posible apilar muchas funciones de autoloading diferentes.

Lo que tenés que asegurarte es que la llamada a spl_autoload_register se produzca al comienzo del hilo de ejecución. Tené en cuenta esto, cada request php levanta su propio hilo, con lo cual, tenés que asegurarte de que el archivo donde se realiza esta invocación sea incluido siempre.

Si usás un framework (Symfony por ejemplo), esto viene dado sin que hagas nada. Si estás usando tu propio sistema, te diría que uses una re-escritura a nivel de webserver para que todos los requests pasen por un único archivo (index.php o similar) y, dentro de ese, arranques con la inclusión del archivo donde se llama a spl_autoload_register.

Perdón si metí más confusión, espero haber sido claro.

Cualquier cosa preguntame.

Saludos,
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar
sin imagen de perfil

function __autoload en php

Publicado por Gustavo (4 intervenciones) el 14/03/2024 19:33:00
muchas gracias Mauro, lo voy a ver con un amigo, me desburraste bastante.
Saludos cordiales
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar
sin imagen de perfil

function __autoload en php

Publicado por Gustavo (4 intervenciones) el 19/03/2024 22:10:09
Hola Mauro, por favor dame una mano.
En el inicio del Index.php coloco:
<?php require_once(dirname(__FILE__).'/apps/frontend/initialization.php'); ?>



en el initialization.php esta la funcion

echo '<br><br><br> ---------------------------------------- 00 ';
spl_autoload_register($class_name); // linea 249 donde da el error
spl_autoload_register(function ($class_name) {
echo '<br><br><br> ---------------------------------------- 0 ';
$filename = strtolower($class_name) . '.class.php';
echo '<br><br><br> ---------------------------------------- 1 ';
$Registy = Registry::getInstance();//
$Registy->autoload['paths'];//
$file = paths.'/' . $filename;
echo '<br><br><br> ---------------------------------------- $filename '.$filename;
if (file_exists($file) == false) {
return false;
}
include ($file);
});



y me da este error
---------------------------------------- 00
Notice: Undefined variable: class_name in C:\xampp\htdocs\AUTOS_3\01-BAKER\apps\frontend\initialization.php on line 249

Fatal error: Uncaught LogicException: Illegal value passed (no array or string given) in C:\xampp\htdocs\AUTOS_3\01-BAKER\apps\frontend\initialization.php:249 Stack trace: #0 C:\xampp\htdocs\AUTOS_3\01-BAKER\apps\frontend\initialization.php(249): spl_autoload_register(NULL) #1 C:\xampp\htdocs\AUTOS_3\01-BAKER\index.php(1): require_once('C:\\xampp\\htdocs...') #2 {main} thrown in C:\xampp\htdocs\AUTOS_3\01-BAKER\apps\frontend\initialization.php on line 249


antes tenia esta funcion

function __autoload($class_name) {
$Registy = Registry::getInstance();
// echo '<br> +++++++++++++++++++++++++++++++++++++++++++ $Registy '.$Registy;
foreach($Registy->autoload['paths'] as $path) {
$filepath = $path . '/' . strtolower($class_name) . '.class.php';
echo '<br> ---------------------------------------- $filepath '.$filepath;
if(is_file($filepath)) {
require_once $filepath;
break;
}else{
// echo '<br> ////////////////////////////////// ERROR ';
}
}
}
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Mauro
Val: 2.761
Oro
Ha aumentado 1 puesto en PHP (en relación al último mes)
Gráfica de PHP

function __autoload en php

Publicado por Mauro (1036 intervenciones) el 21/03/2024 15:22:07
Esta línea:

1
spl_autoload_register($class_name);

Tiene dos problemas:

1. La variable $class_name no parece estar definida aún
2. Por lo que veo más adelante, su valor sería un string (El nombre de la clase que estás intenando cargar), con lo cual, seguiría siendo un error.

Fíjate que la definición de spl_autoload_register indica que su parámetro es un callable (Una función anónima probablemente).

En concreto, te diría que removiendo la línea 249 deberías estar ok.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar