Visualizzazione dei risultati da 1 a 7 su 7

Discussione: [php5] autoload e PEAR

  1. #1
    Utente di HTML.it L'avatar di pgm
    Registrato dal
    Apr 2002
    Messaggi
    1,281

    [php5] autoload e PEAR

    Ciao a tutti

    Sto riscontrato problemi nell'utilizzo della funzione __autoload e l'utilizzo di un pear package, in particolare Calendar.

    Infatti sembra che l'inclusione tramite require_once della classe pear cozzi con la funzione __autoload.

    Ipotizzando di avere un file index.php e utilizzare il seguente codice

    codice:
    function __autoload($class_name) {
       require_once $class_name . '.class.php';
    }
    
    $esempio = new esempio();
    
    require_once 'Calendar/Month/Weekdays.php';
    $Month = new Calendar_Month_Weekdays(2007, 11);
    .
    .
    .
    ho l'errore
    Warning: require_once(c:/miaapplicazione/mieclassi/Calendar_Month.class.php)
    [function.require-once]: failed to open stream: No such file or directory in C:\miaapplicazione\index.php on line 7

    Fatal error: require_once() [function.require]: Failed opening required ecc ecc ecc


    (La riga 7 corrisponde all'inclusione tramite require della classe pear.)

    Se invece non uso l'autoload ma solo il require_once anche per la classe 'esempio' non ho errori di alcun tipo, e riesco
    tranquillamenrte ed utilizzare la classe pear, nella fattispecie Caledar.

    codice:
    require_once 'esempio.php'
    $esempio = new esempio();
    
    require_once 'Calendar/Month/Weekdays.php';
    $Month = new Calendar_Month_Weekdays(2007, 11);
    .
    .
    .
    Siete incappati anche voi nello stesso inconveniente?

    Grazie per eventuali risposte

  2. #2
    Utente di HTML.it L'avatar di pgm
    Registrato dal
    Apr 2002
    Messaggi
    1,281
    uppino

  3. #3
    Utente di HTML.it L'avatar di pgm
    Registrato dal
    Apr 2002
    Messaggi
    1,281
    uppino

  4. #4
    io per l'autoload uso questa
    codice:
    define('CLASS_DIR', 'phpClassesFolder/');
    function __autoload($name) {
    	if($exists = !class_exists($name) && file_exists($class = CLASS_DIR.$name.'.class.php'))
    		require $class;
    	elseif(!$exists) {
    		eval('class '.$name.' extends Exception {}');
    		throw new $name('[__autoload] this file doesn\'t exists: '.$class);
    	}
    }
    qui hai un esempio
    Formaldehyde a new Ajax PHP Zero Config Error Debugger

    WebReflection @WebReflection

  5. #5
    Utente di HTML.it L'avatar di pgm
    Registrato dal
    Apr 2002
    Messaggi
    1,281
    ciao andrea grazie della risposta ma nemmeno con la tua soluzione risolvo il problema dell'inclusione tramite require_once di pear calendar.

    Sembra quasi che alla creazione della classe, se ne freghi del require_once e vada a cercare l'__autoload.

    Infatti l'errore riporta che la classe calendar_month di pear calendar non esiste all'interno di CLASS_DIR, cosa giusta e molto vera

    Che l'autoload vada a sovrascrivere la direttiva include_path (che contiene il percorso al pear)?

  6. #6
    la mia soluzione non utilizza require_once ... ma effettivamente ignora il path PEAR.

    dovresti fare qualcosa tipo
    codice:
    define('CLASS_DIR', 'phpClassesFolder/');
    define('PEAR_DIR', 'PEARClassesFolder/');
    function __autoload($name) {
    	$exists = !class_exists($name);
    	if((file_exists($class = CLASS_DIR.$name.'.class.php') || file_exists($class = PEAR_DIR.$name.'.class.php')) && $exists){
    		require $class;
    	}
    	elseif(!$exists){
    		eval('class '.$name.' extends Exception {}');
    		throw new $name('[__autoload] this file doesn't exists: '.$class);
    	}
    }
    :master:
    Formaldehyde a new Ajax PHP Zero Config Error Debugger

    WebReflection @WebReflection

  7. #7
    Utente di HTML.it L'avatar di pgm
    Registrato dal
    Apr 2002
    Messaggi
    1,281
    bene ora funziona.

    ti ringrazio per l'aiuto

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.