¿Usar namespace o spl_autoload_register()?

  • Autor Autor Usuario eliminado 232346
  • Fecha de inicio Fecha de inicio
U

Usuario eliminado 232346

Hola!, estoy utilizando autocarga de clases con el clásico include, pero quiero actualziar mi código, que me recomiendan, ¿namespace o spl_autoload_register()?.
Estuve leyendo que namespace es recomendado al día de hoy, pero no se.
¿Qué opinan ustedes?.
 
Por lo general se usan ambos:


Ahí puedes ver un ejemplo de uso: Cuando se llama a una clase, utiliza el nombre del namespace como si fuera una carpeta dentro des /src/ y el nombre de la clase como nombre del archivo.

Por un ejemplo de un modelo para ese código sería algo como esto:

En /src/Models/User.php

PHP:
<?php
use Libs\ModelMysql;

class User extends ModelMysql {
    public $username;
    public $email;
    // bla bla bla
}
?>

Del mismo modo, luego puedes llamar a ese modelo en otros archivos de esta manera:

PHP:
<?php
use Models\User;

// Crear un nuevo usuario y guardarlo en la base de datos
$userTest    = new User;
$userTest->name  = 'Usuario de pruebas';
$userTest->email = 'test@mail.com';
// bla bla bla
$userTest->save();
?>

Todo eso sin necesidad de hacer includes, solo usando las clases con sus namespaces.

kj
 
Buen aporte gracias
 
Por lo general se usan ambos:


Ahí puedes ver un ejemplo de uso: Cuando se llama a una clase, utiliza el nombre del namespace como si fuera una carpeta dentro des /src/ y el nombre de la clase como nombre del archivo.

Por un ejemplo de un modelo para ese código sería algo como esto:

En /src/Models/User.php

PHP:
<?php
use Libs\ModelMysql;

class User extends ModelMysql {
    public $username;
    public $email;
    // bla bla bla
}
?>

Del mismo modo, luego puedes llamar a ese modelo en otros archivos de esta manera:

PHP:
<?php
use Models\User;

// Crear un nuevo usuario y guardarlo en la base de datos
$userTest    = new User;
$userTest->name  = 'Usuario de pruebas';
$userTest->email = 'test@mail.com';
// bla bla bla
$userTest->save();
?>

Todo eso sin necesidad de hacer includes, solo usando las clases con sus namespaces.

kj
¡Muchísimas gracias!, había visto tanta información que estaba mareado ya, jajaja.
Entonces por lo que veo puedo utilizar una masnera o la otra, o incluso combinar ambas. Eso es lo que tenía muy claro si se podía hacer.
 
Hola!, estoy utilizando autocarga de clases con el clásico include, pero quiero actualziar mi código, que me recomiendan, ¿namespace o spl_autoload_register()?.
Estuve leyendo que namespace es recomendado al día de hoy, pero no se.
¿Qué opinan ustedes?.

namespace,
Que la gestión y carga de librerías lo haga Composer.
Y en tu archivo de configuración (composer.json) agrega la carpeta src para ser cargadas automáticamente (revisar PSR-4)

Saludos
 
namespace,
Que la gestión y carga de librerías lo haga Composer.
Y en tu archivo de configuración (composer.json) agrega la carpeta src para ser cargadas automáticamente (revisar PSR-4)

Saludos
¿Tiene en cuenta los subdirectorios también?.
 
Sí, vas a utilizar varias carpetas, se deben declarar en composer.json. Pero te recomiendo que todas trabajen una carpeta principal; quedaría algo como: Forobeta/Models
ForoBeta/Controllers etc.

en tu composer.json
JSON:
{
//...
    "autoload": {
        "psr-4": {
            "Forobeta\\": "src/Forobeta"
        }
    }
}
 
Sí, vas a utilizar varias carpetas, se deben declarar en composer.json. Pero te recomiendo que todas trabajen una carpeta principal; quedaría algo como: Forobeta/Models
ForoBeta/Controllers etc.

en tu composer.json
JSON:
{
//...
    "autoload": {
        "psr-4": {
            "Forobeta\\": "src/Forobeta"
        }
    }
}
¡Muchas gracias! 🙂
 
Atrás
Arriba