Clase de carga automática de PHP

<? php

/ **
 * Cargar automáticamente archivos de clase
 * autor: zbseoag
 * QQ: 617937424
 * *
// Carga automáticamente las clases cuyo nombre de clase comienza con 'Modelo', carga: ./lib/Model/*.class.php file
Carga automática :: home ('./ lib /') -> match ('\ Model') -> suffix ('class.php') -> register ()
$ usuario = nuevo \ Modelo \ Usuario ();
echo Autoload :: $ archivo;

// Ruta del archivo de prueba
echo Autoload :: home (__ DIR __) -> make ('Mysql');

// Regístrese y cargue una prueba manualmente
Carga automática :: home (__ DIR __) -> register () -> load ('Mysql');

 * *
 * /

carga automática de clase {
    
    public static $ init;
    public $ suffix = 'php';
    public $ home = './';
    public static $ file = '';
    public $ match = '';

    función privada __construct ($ home = '') {

        // Eliminar las barras en ambos lados de la casa: Modelo \ Usuario
        $ this-> home = trim ($ home, '\\ /');
    }

    / **
     * Directorio raíz de archivos
     * @param $ value
     * @return $ this
     * /

    función pública estática home ($ value = '') {

        if (! self :: $ init) self :: $ init = nueva estática ($ valor);
        return self :: $ init;
    }


    / **
     * Espacio de nombres del partido
     * @param $ value
     * @return $ this
     * /
    coincidencia de función pública (valor de $) {

        $ this-> match = trim ($ value, '\\ /');
        devuelve $ this;
    }

    / **
     * Sufijo de archivo de nombre de clase, como 'class.php'
     * @param $ value
     * @return $ this
     * /
    sufijo de función pública (valor de $) {
        
        $ this-> suffix = ltrim ($ value, '.');
        devuelve $ this;
    }

    registro de función pública () {
        spl_autoload_register (función ($ clase) {
            $ this-> load ($ clase);
        });

        devuelve $ this;
    }

    / **
     * Generar ruta de archivo
     * @param $ class
     * @cadena de retorno
     * /
    función pública make ($ class) {

        // Elimina las barras en ambos lados de la clase: Modelo \ Usuario
        $ clase = trim ($ clase, '\\');

        self :: $ file = '';
        if (vacío ($ this-> match) || strpos ($ class, $ this-> match) === 0) {
            self :: $ file = strtr ($ this-> home. '/'. $ class, '\\', '/'). '.' . $ this-> sufijo;
        }

        devuelve $ this;

    }

    / **
     * Carga manual
     * @param $ class
     * /
    carga de función pública ($ class = '') {

        if (! empty ($ class)) $ this-> make ($ class);

        if (self :: $ file) requiere self :: $ file;
        devuelve $ this;
    }

    / **
     * Crear objetos dinámicamente
     * @param $ class
     * @param $ argumentos
     * @ objeto de devolución
     * @throws ReflectionException
     * /
    función pública estática create ($ class, $ argumentos) {

        $ clase = nuevo \ ReflectionClass ($ clase);
        return $ class-> newInstanceArgs ($ argumentos);
    }


    funciones de funciones públicas () {
        return spl_autoload_functions ();
    }


    
}

  

Supongo que te gusta

Origin www.cnblogs.com/zbseoag/p/12717214.html
Recomendado
Clasificación