2014-07-11 2 views
0

오토로더 클래스를 구현 중이며 작동하지 않습니다.PHP 오토로더 클래스

class System 
{ 
    public static $loader; 

    public static function init() 
    { 
     if (self::$loader == NULL) 
     { 
      self::$loader = new self(); 
     } 

     return self::$loader; 
    } 

    public function __construct() 
    { 
     spl_autoload_register(array($this, "autoload")); 
    } 

    public function autoload($_class) 
    { 
     set_include_path(__DIR__ . "/"); 
     spl_autoload_extensions(".class.php"); 
     spl_autoload($_class); 
print get_include_path() . "<br>\n"; 
print spl_autoload_extensions() . "<br>\n"; 
print $_class . "<br>\n"; 
    } 
} 

자동 로더를 호출하는 코드는 여기에 있습니다 : :

<?php 
error_reporting(-1); 
ini_set('display_errors', 'On'); 

require_once __DIR__ . "/system/System.class.php"; 

System::init(); 

$var = new MyClass(); // line 9 

print_r($var); 
?> 

그리고 오류 메시지 :

/home/scott/www/system/ 
.class.php 
MyClass 
Fatal error: Class 'MyClass' not found in /home/scott/www/index.php on line 9 

자동로드 기능은 아래 (this page on php.net에서 영감) 오토로더 클래스입니다 히트를 치면 MyClass.class.php 파일이 포함 된 경로에 존재하는데 코드를이 코드로 변경하면 확인할 수 있습니다 :

<?php 
error_reporting(-1); 
ini_set('display_errors', 'On'); 

require_once __DIR__ . "/system/System.class.php"; 
require_once __DIR__ . "/system/MyClass.class.php"; 

System::init(); 

$var = new MyClass(); 

print_r($var); 
?> 

print_r($var);은 오류없이 개체를 반환합니다.

조언이나 조언이 필요하십니까?

+0

내가 작곡가의 오토로더를 사용하도록 제안하고 당신에게 옵션을 spl_autoload에 대한 문서 (에 따르면 –

+0

을 다른 패키지를 쉽게 사용하는 것)에 함수는 클래스를 소문자로 처리하므로 MyClass.class.php보다는 myclass.class.php를 찾고 있습니다. 내 파일 이름을 낮은 사례 버전으로 변경하면 정상적으로 작동합니다. 바보. –

답변

0

doc page for spl_autoload에 설명 된 것처럼 클래스 파일은 클래스 파일을 찾기 전에 더 낮습니다.

그래서 해결책 1은 내 파일을 소문자로 만드는 것입니다. 이는 실제로 저에게 맞는 대답은 아닙니다. MyClass라는 클래스가 있는데, myclass.class.php가 아닌 MyClass.class.php라는 파일에 넣고 싶습니다.

솔루션이 전혀 spl_autoload를 사용하지 않는 것입니다 :

<?php 
class System 
{ 
    public static $loader; 

    public static function init() 
    { 
     if (self::$loader == NULL) 
     { 
      self::$loader = new self(); 
     } 

     return self::$loader; 
    } 

    public function __construct() 
    { 
     spl_autoload_register(array($this, "autoload")); 
    } 

    public function autoload($_class) 
    { 
     require_once __DIR__ . "/" . $_class . ".class.php"; 
    } 
} 
?> 
관련 문제