Visualizzazione dei risultati da 1 a 2 su 2
  1. #1
    Utente di HTML.it
    Registrato dal
    Jun 2008
    Messaggi
    1,317

    spl_autoload_register cosa sbaglio?

    index.php

    Codice PHP:
    <?php
    namespace system\bootstrap;
    use 
    system\bootstrap\Blind;
    use 
    BaseHandler\BaseHandler2;
    use 
    BaseException\ExceptionHandler;
    use 
    test\prova\lol;

    set_error_handler(array('system\bootstrap\Blind''errorHandler'), E_ALL);
    spl_autoload_register(array('system\bootstrap\Blind''autoload'));

    class 
    Blind {  
      public function 
    __construct() {
        
    //lol::ok();    
        //\test\prova\lol::ok();    
        
    echo $s;  
      }    

      public static final function 
    autoload($className) {
        
    $namespaces explode('\\'$className);    
        
    $method array_pop($namespaces);
        include(
    'includes/'.implode('/'$namespaces).'.php');  
      }

      public static final function 
    errorHandler($errorNo$message$filename$lineNo) {     
        throw new 
    ExceptionHandler();  
      }
    }

    new 
    Blind;
    echo $s; mi serve per generare un errore da catchare.

    includes/BaseHandler.php

    Codice PHP:
    <?php
    namespace BaseHandler;

    class 
    BaseHandler2 extends \Exception {}
    includes/BaseException.php

    Codice PHP:
    <?php
    namespace BaseHandler;

    class 
    ExceptionHandler extends BaseHandler2 implements IException {    
      public function 
    __construct($message ''$code 0$description '', \Exception $previous null) {        
        
    parent::__construct((string) $message, (int) $code$previous);            
     }        

      public function 
    show() {      
        echo 
    "ok";    
      }
    }
    Errore:

    Fatal error: Cannot redeclare class BaseHandler\BaseHandler2 in \includes\BaseHandler.php on line 6
    Ultima modifica di zacca94; 19-04-2016 a 06:24

  2. #2
    Utente di HTML.it
    Registrato dal
    Jun 2008
    Messaggi
    1,317
    Ok rinominando ogni file con un namespace diverso il tutto funziona, ma così non ha poco senso? E se volessi definire tutto sotto ad un unico namespace?

    Il file attuale è questo:

    index.php
    Codice PHP:
    <?php
    namespace system\bootstrap;
    use 
    system\bootstrap\Blind;
    use 
    BaseException\ExceptionHandler2;
    use 
    BaseHandler\BaseHandler2;
    use 
    test\prova\lol;

    set_error_handler(array('system\bootstrap\Blind''errorHandler'), E_ALL);

    spl_autoload_register(function ($className) {  
      
    $namespaces explode('\\'$className);  
      
    $method array_pop($namespaces);  
      echo 
    "<br>".('includes/'.implode('/'$namespaces))."<br>";  
      include(
    'includes/'.implode('/'$namespaces).'.php');
    });


    class 
    Blind {  
      public function 
    __construct() {    
        echo 
    $s;  
      }  
        
      public static final function 
    errorHandler($errorNo$message$filename$lineNo) {                        
        throw new 
    ExceptionHandler2();        
      }    
    }

    new 
    Blind;
    includes/BaseHandler.php
    Codice PHP:
    <?php
    namespace BaseHandler;
    use 
    BaseHandler\BaseHandler2;

    class 
    BaseHandler2 extends \Exception {}
    includes/BaseException.php
    Codice PHP:
    <?php
    namespace BaseException;
    use 
    BaseHandler\BaseHandler2;
    use 
    IException\IException;

    class 
    ExceptionHandler2 extends BaseHandler2 implements IException {    
      public function 
    __construct($message ''$code 0$description '', \Exception $previous null) {        
      echo (string) 
    $message "<br>" . (int) $code "<br>" $previous;            
      }        

      public function 
    show() {      
        echo 
    "ok";    
      }
    }
    includes/IException.php
    Codice PHP:
    <?php
    namespace IException;
    interface 
    IException {  public function show();}
    Ultima modifica di zacca94; 19-04-2016 a 06:59

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 © 2025 vBulletin Solutions, Inc. All rights reserved.