Portada » Lenguaje PHP » Cómo solucionar Deprecated: __autoload()

Cómo solucionar Deprecated: __autoload()

Cómo solucionar Deprecated: __autoload(). Generalmente en sistemas ya antiguos suele presentar estos errores con las versionas más recientes de PHP: Deprecated: __autoload() is deprecated, use spl_autoload_register().

Cómo solucionar Deprecated: __autoload()

La carga automática es un proceso para cargar automáticamente clases e interfaces sin usar instrucciones include, include_once, require o require_once al principio en cada archivo PHP.

El __autoload es una función que se puede definir para habilitar la carga automática de clases e interfaces. Esta función se llama automáticamente cuando la clase o la interfaz no están definidas actualmente.

Cómo solucionar Deprecated: __autoload()
Cómo solucionar Deprecated: __autoload()

Function __autoload Has Been Removed in PHP 8.0

Desde la versión PHP 7.2, __autoload ha quedado obsoleto y desde PHP 8.0 esta función ha sido eliminada. En lugar de __autoload función necesitamos usar spl_autoload_register función. Esta función es más flexible porque permite especificar muchos cargadores automáticos.

Digamos que tenemos una clase User:

<?php

class User {}

Hemos definido la función __autoload para la carga automática de clases e interfaces:

<?php

function __autoload(string $name) {
require_once $name.'.php';
}

$user = new User();

Un código se puede reescribir utilizando spl_autoload_register función de la siguiente manera:

<?php

function autoloader(string $name) {
require_once $name.'.php';
}

spl_autoload_register('autoloader');

$user = new User();

Cómo usar spl_autoload() en lugar de __autoload()

Cuando actualizamos la versión del PHP para gozar de todas sus ventajas uno de los mayores problemas suele ser la compatibilidad de algunas funciones predeterminadas del PHP, algunas quedan en desuso como el ejemplo que tenemos. El mensaje resultante en el navegador suele ser el siguiente:

Fatal error: __autoload() is no longer supported, use spl_autoload_register() PHP 8.0

Vamos a suponer que tenemos un sistema que fue creado con PHP v5.6 y necesito actualizar a PHP v8.0.10. Entonces, en este primer inconveniente que tenemos es que la función __autoload que ya no es compatible y fue eliminada en la actual versión del PHP.

¿Cómo puedo cambiar a spl_autoload_register?

Mira el código código que tenemos:

function __autoload($class) {
include 'classes/' . $class . '.class.php';
}

Ahora, si observamos detenidamente el script anterior posee una función PHP ya obsoleta y removida en las versiones PHP 8, por lo tanto, debemos de cambiar a otra similar que cumpla el mismo rol y nos referimos a la función spl_autoload_register() del PHP.

Es recomendable usar las funciones de carga automática con spl_autoload_register. Debe proporcionar un «llamado«. La mejor manera de hacerlo, a partir de la versión 5.3, es con una función anónima:

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

Nota:
La principal ventaja de spl_autoload_register() frente a __autoload es, por supuesto, que puede llamar a spl_autoload_register varias veces, mientras que __autoload (como cualquier función) solo se puede definir una vez. Si tiene código modular, esto sería un inconveniente significativo.

Deprecated: __autoload() en codeigniter

Vamos a poner un ejemplo para poder darle solución a un problema de __autoload() en el framework de PHP CodeIgniter y el código sería el siguiente:

function __autoload($class) {
if (strpos($class, 'CI_') !== 0) {
if (file_exists($file = APPPATH . 'core/' . $class . php)) {
include $file;
}
}
}

La tecnología avanza y las versiones de PHP de igual manera. Por lo tanto, todo tipo de framework PHP como el caso de CodeIgniter también se actualizan a las versiones más recientes.

Es por ello que este tipo de error surge cuando nuestro framework es un poco antiguo y la versión del PHP muy actualizado y suele mostrar un error similar a esto:

Deprecated: __autoload() is deprecated, use spl_autoload_register() and Fatal error: Cannot redeclare __autoload() error in codeigniter

¿Cuál sería la solución en CodeIgniter?

Para agregar spl_autoload_register() simplemente reemplace este código con su código, especialmente en routes.php y listo, con esto ya nuestro framework trabajara muy bien.

Function __autoload Has Been Removed in PHP 8.0 – Conclusión

Recordemos que toda tecnología con el paso del tiempo se mejora y se ve reflejado con las versiones del producto. Sin embargo, en sistemas web los años no pasan en vano, con el paso del tiempo los sistemas suelen quedarse obsoletos si no se les da un mantenimiento.

En este articulo hemos aprendido a solucionar este inconveniente con la llegada del PHP 8 y hemos actualizado para que nuestro script funciones sin problema reemplazado el __autoload().

Espero que esta breve explicación les ayude en sus proyectos web a actualizar sistemas antiguos.

¿De cuánta utilidad te ha parecido este contenido?

¡Haz clic en una estrella para puntuarlo!

Promedio de puntuación 0 / 5. Recuento de votos: 0

Hasta ahora, ¡no hay votos!. Sé el primero en puntuar este contenido.

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Scroll al inicio
Esta web utiliza cookies propias para su correcto funcionamiento. Contiene enlaces a sitios web de terceros con políticas de privacidad ajenas que podrás aceptar o no cuando accedas a ellos. Al hacer clic en el botón Aceptar, acepta el uso de estas tecnologías y el procesamiento de tus datos para estos propósitos.
Privacidad