2013-10-31 5 views
5

hier zu fragen ist ein Fehler für meine Autoloader-Klasse/-Funktion mit spl_autoload_register?LogicException Fehler: Passed Array gibt keine vorhandene statische Methode

zu schätzen, um zu helfen.

hier ist mein Code

<?php 

namespace system\core; 

// if(!defined('IN_APP')){ 
    // exit('Access Denied'); 
// } 

define('ROOT', $_SERVER['DOCUMENT_ROOT']); 
define('DS', DIRECTORY_SEPARATOR); 

if(function_exists('spl_autoload_register')){ 

    spl_autoload_register(array('core', 'autoload')); 

}else{ 

    function __autoload($class){ 

     return core::autoload($class); 

    } 

} 

A:createapp(); 

class core 
{ 

    private static $_app; 

    public static function createapp(){ 

     if(!is_object(self::$_app)){ 

      self::$_app = 'something'; 

     } 

     return self::$_app; 
    } 

    public static function autoload($class){ 

     $class = trim(strtolower($class)); 

     if(strpos($class, '\\') !== false){ 

      $path = ROOT; 

      $path .= DS . $class . '.php'; 

      $path = preg_replace('/[\\|\/]/i', DS, $path); 

      require_once($path); 

     } 

    } 

} 

class A extends core {} 

und ich habe diesen Fehler

Fatal error: Uncaught exception 'LogicException' with message 'Passed array does not specify an existing static method (class 'core' not found)' in C:\xampp\htdocs\test\system\core.php:14 Stack trace: #0 C:\xampp\htdocs\test\system\core.php(14): spl_autoload_register(Array) #1 {main} thrown in C:\xampp\htdocs\test\system\core.php on line 14 

, nachdem ich den Fehler msg lesen, bedeutet es die Klasse Kern nicht gefunden? aber die Klasse ist in der gleichen Datei geschrieben ???

Antwort

4

Sie müssen einen vollständig qualifizierten Namen festlegen. Da Ihre Klasse in system\core Namespace ist:

spl_autoload_register(array('system\core\core', 'autoload')); 
+0

Danke, es hat funktioniert, vergessen i Namespace bin verwenden, legen Sie es als Antwort nach 2 Minuten – geass

+0

ich das gleiche Problem habe. In meinem Fall befindet sich die Klasse, die die Autoload-Funktion enthält, in einer anderen Datei vom Aufruf 'spl_autoload_register'. Es funktioniert, wenn ich die Klasse in dieselbe Datei wie den 'spl_autoload_register'-Aufruf kopiere. –

Verwandte Themen