Visualizzazione dei risultati da 1 a 7 su 7
  1. #1
    Utente di HTML.it L'avatar di Fractals87
    Registrato dal
    Apr 2008
    Messaggi
    1,202

    MyAutoloder e PHPExcellClass

    Ciao a tutti,
    Per la mia applicazione ho creato un piccolo autoloder per le mie classi:
    Codice PHP:
    define("ROOT""/service/Test/");

    function 
    __autoload($class) {
        
    $class str_replace("_","/",$class);
        include 
    ROOT.'lib/' $class '.php';    

    Ho iniziato ad aver problemi quando ho integrato la classe PHPExcell

    require_once('lib/PHPExcel/PHPExcel.php');

    in pratica questa classe definisce a sua volta un suo autoloder

    Codice PHP:
    PHPExcel_Autoloader::Register();
    //    As we always try to run the autoloader before anything else, we can use it to do a few
    //        simple checks and initialisations
    //PHPExcel_Shared_ZipStreamWrapper::register();
    // check mbstring.func_overload
    if (ini_get('mbstring.func_overload') & 2) {
        throw new 
    PHPExcel_Exception('Multibyte function overloading in PHP must be disabled for string functions (2).');
    }
    PHPExcel_Shared_String::buildCharacterSets();


    /**
     * PHPExcel_Autoloader
     *
     * @category    PHPExcel
     * @package     PHPExcel
     * @copyright   Copyright (c) 2006 - 2013 PHPExcel (http://www.codeplex.com/PHPExcel)
     */
    class PHPExcel_Autoloader
    {
        
    /**
         * Register the Autoloader with SPL
         *
         */
        
    public static function Register() {
            if (
    function_exists('__autoload')) {
                
    //    Register any existing autoloader function with SPL, so we don't get any clashes
                
    spl_autoload_register('__autoload');
            }
            
    //    Register ourselves with SPL
            
    return spl_autoload_register(array('PHPExcel_Autoloader''Load'));
        }   
    //    function Register()


        /**
         * Autoload a class identified by name
         *
         * @param    string    $pClassName        Name of the object to load
         */
        
    public static function Load($pClassName){
            if ((
    class_exists($pClassName,FALSE)) || (strpos($pClassName'PHPExcel') !== 0)) {
                
    //    Either already loaded, or not a PHPExcel class request
                
    return FALSE;
            }

            
    $pClassFilePath PHPEXCEL_ROOT .
                              
    str_replace('_',DIRECTORY_SEPARATOR,$pClassName) .
                              
    '.php';

            if ((
    file_exists($pClassFilePath) === FALSE) || (is_readable($pClassFilePath) === FALSE)) {
                
    //    Can't load
                
    return FALSE;
            }

            require(
    $pClassFilePath);
        }   
    //    function Load()


    il problema sopraggiunge con questa dichiarazione
    PHPExcel_Shared_String::buildCharacterSets();
    il mio autoloder non lo trova... ovviamente.
    la classe è localizzata in lib/PHPExcell/PHPExcell/Shared/String.php

    Ma io da grande risolutore con le cose più strane ho trovato una soluzione...
    Voglio vedere quanti insulti posso ricevere...

    Codice PHP:
    function __autoload($class) {
        
    $class str_replace("_","/",$class);
        if(!
    strstr($class,"PHPExcel"))
            include 
    ROOT.'lib/' $class '.php';    

    Scherzi a parte, quali altre soluzioni posso avere?

    Grazie a tutti ciao a tutti
    Che mestiere difficile.....essere da soli ancora di più

  2. #2
    Moderatore di Javascript L'avatar di ciro78
    Registrato dal
    Sep 2000
    residenza
    Napoli
    Messaggi
    8,509
    tipo lasciare che l'autolader di terze parti faccia il proprio dovere? che senso ha creare un autoloader per una libreria se già esiste?
    Ciro Marotta - Programmatore JAVA - PHP
    Preferisco un fallimento alle mie condizioni che un successo alle condizioni altrui.


  3. #3
    Utente di HTML.it L'avatar di Fractals87
    Registrato dal
    Apr 2008
    Messaggi
    1,202
    l'autoloader l'ho fatto io per le mie classi solo che quando includo la libreria di PHPExcell mi da il problema
    Che mestiere difficile.....essere da soli ancora di più

  4. #4
    la soluzione che hai adottato, anche se un po' spartana, va bene.. Per aggiornarti dovresti vedere in firma e magari introdurre i namespace

    accidenti non ce l'ho più in firma.. aspè

    qui dal mio sito(manca una parte): http://www.webtechs.it/index.php/nod.../535d1368879e1
    qui sul fol completo: http://forum.html.it/forum/showthrea...readid=2908086
    Ultima modifica di Al_katraz984; 20-06-2014 a 15:03
    Questa volta, più che un voto.. è favoreggiamento.

  5. #5
    Utente di HTML.it L'avatar di Fractals87
    Registrato dal
    Apr 2008
    Messaggi
    1,202
    ottimo al_katraz984 mi hai appena postato un weekend di buona lettura e implementazioni.
    Purtroppo non ho modo di implementare per ora i namespace, sto girando con una vecchia versione di php e non ho modo di variare la versione..

    Dando una rapida occhiata, non riesco a capire bene.
    Mi pare di capire che non devo implementare una mia classe __autoload ma bensì registrarne una con spl_autoload_register.
    Che mestiere difficile.....essere da soli ancora di più

  6. #6
    Utente di HTML.it L'avatar di garakkio
    Registrato dal
    Dec 2011
    residenza
    Roma
    Messaggi
    480
    Quote Originariamente inviata da Fractals87 Visualizza il messaggio
    Mi pare di capire che non devo implementare una mia classe __autoload ma bensì registrarne una con spl_autoload_register.
    Esatto

  7. #7
    la classe è già bella, pronta e standard.......
    Questa volta, più che un voto.. è favoreggiamento.

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.