Visualizzazione dei risultati da 1 a 7 su 7

Discussione: Autocaricamento classi

  1. #1

    Autocaricamento classi

    Ciao,

    nel mio piccolo ho "partortito" la seguente funzione che si occupa egregiamente di caricare le classi
    che mi servono tenendo presente che tengo separate quelle comuni da quelle relative alla parte "client" e parte "admin".

    Che ne pensate ? Sono aperto a qualsiasi consiglio. E' migliorabile ? E se si come ?

    Grazie
    Codice PHP:
    <?php

    // Impedisco l'accesso diretto alla pagina
    defined 'eblock' ) or die ( 'Access Restricted' );

    // Annullo qualsiasi precedente autoload
    spl_autoload_register nullfalse );


    // Precaricamento estensioni
    spl_autoload_extensions '.php' );

    // Funzione autoload
    function classLoader $class )
    {

    /** 
      *
      * Array contenente le varie locazioni per le classi
      * che sono classi comuni a tutto il progetto e classi
      * o sottoclassi specifiche per il pannello di controllo
      * e per il sito. Le costanti che ho usato sono tuttue
      * definite nel file index.php che a sua volta logiacamente
      * ha un include a questo file.
      *
      * define ( 'eBlock', 1, true );
      * define ( 'ds', DIRECTORY_SEPARATOR, true );
      * define ( 'eAdminPath', dirname ( __FILE__ ), true );
      * $path = explode ( ds, eAdminPath );
      * array_pop ( $path );
      * define ( 'eSitePath', implode ( ds, $path ), true );
      *
      */
    $classPath = array ( eAdminPath ds 'class'eSitePath ds 'common' ds eSitePath ds 'class' );

            
    // Estraggo i path delle directory che contengono le classi.
            
    foreach ( $classPath as $key => $value )
            {

                    
    // Verifico se esiste il file
                    
    if ( file_exists $value '/' strtolower $class ) . '/' strtolower $class ) . '.php' ) )
                    {

                            
    // Se c'è lo includo 
                            
    include $value '/' strtolower $class ) . '/' strtolower $class ) . '.php';

                    }
                    
            }
    }
    // E registro l'autoload
    spl_autoload_register 'classLoader' );

    ?>

  2. #2
    Ciao,
    cosi avevo risolto tempo fa giusto per un altro spunto
    (per tua info dai un occhio nache a Zend::Loader)
    Codice PHP:
    /**
      * Provides functionality for including files.
      */
    class w_ClassLoader
    {
      
    /**
        * Default autoloader for wonstrukt naming scheme.
        */
      
    static function autoload($classname) {
        
    $filename str_replace('_''/'strtolower($classname)).'.php';
        if (
    self::SearchIncludePath($filename)) {
          require_once(
    $filename);
        }
      }

      
    /**
        * Searches the include-path for a filename.
        * Returns the absolute path (realpath) if found or FALSE
        * @return mixed
        */
      
    static function SearchIncludePath($filename) {
        if (
    is_file($filename)) {
          return 
    $filename;
        }
        foreach (
    explode(PATH_SEPARATORini_get("include_path")) as $path) {
          if (
    strlen($path) > && $path{strlen($path)-1} != DIRECTORY_SEPARATOR) {
            
    $path .= DIRECTORY_SEPARATOR;
          }
          
    $f realpath($path $filename);
          if (
    $f && is_file($f)) {
            return 
    $f;
          }
        }
        return 
    FALSE;
      }
    }
    spl_autoload_register(Array('w_ClassLoader''autoload')); 



    PS

    Avevo preso spunto di qua http://konstrukt.dk
    Without faith, nothing is possible. With it, nothing is impossible
    http://ilwebdifabio.it

  3. #3
    Originariamente inviato da whisher
    Ciao,
    cosi avevo risolto tempo fa giusto per un altro spunto
    (per tua info dai un occhio nache a Zend::Loader)
    Codice PHP:
    /**
      * Provides functionality for including files.
      */
    class w_ClassLoader
    {
      
    /**
        * Default autoloader for wonstrukt naming scheme.
        */
      
    static function autoload($classname) {
        
    $filename str_replace('_''/'strtolower($classname)).'.php';
        if (
    self::SearchIncludePath($filename)) {
          require_once(
    $filename);
        }
      }

      
    /**
        * Searches the include-path for a filename.
        * Returns the absolute path (realpath) if found or FALSE
        * @return mixed
        */
      
    static function SearchIncludePath($filename) {
        if (
    is_file($filename)) {
          return 
    $filename;
        }
        foreach (
    explode(PATH_SEPARATORini_get("include_path")) as $path) {
          if (
    strlen($path) > && $path{strlen($path)-1} != DIRECTORY_SEPARATOR) {
            
    $path .= DIRECTORY_SEPARATOR;
          }
          
    $f realpath($path $filename);
          if (
    $f && is_file($f)) {
            return 
    $f;
          }
        }
        return 
    FALSE;
      }
    }
    spl_autoload_register(Array('w_ClassLoader''autoload')); 



    PS

    Avevo preso spunto di qua http://konstrukt.dk
    Bello ma non riesco a capire come funziona ... puoi spiegarmi

  4. #4
    Originariamente inviato da MinottoMatteo
    Bello ma non riesco a capire come funziona ... puoi spiegarmi
    be tu dimmi cosa non capisci ...................
    Without faith, nothing is possible. With it, nothing is impossible
    http://ilwebdifabio.it

  5. #5
    Originariamente inviato da whisher
    be tu dimmi cosa non capisci ...................
    ti parrà strano ma riesco a capire come farla funzionare .....

    includere la includo, ma le classi non le trova

  6. #6
    blogial.net/wloader.zip

    la dir w è il namespace.
    Without faith, nothing is possible. With it, nothing is impossible
    http://ilwebdifabio.it

  7. #7
    Originariamente inviato da whisher
    blogial.net/wloader.zip

    la dir w è il namespace.
    Ok funziona. Grazie mille

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.