2017-10-18 23 views
3

Kohana에서 프로젝트를 시작할 수 없습니다. 구성 파일에 데이터베이스 정보를 설정하고 오류가 발생하는 것보다 github에서 복제했습니다. 클래스를 다시 선언 할 수 없습니다.Kohana : 클래스를 다시 선언 할 수 없습니다.

두 가지 자동로드 기능이 있습니다.

public static function auto_load($class, $directory = 'classes') 
    { 
     // Transform the class name according to PSR-0 
     $class  = ltrim($class, '\\'); 
     $file  = ''; 
     $namespace = ''; 

     if ($last_namespace_position = strripos($class, '\\')) 
     { 
      $namespace = substr($class, 0, $last_namespace_position); 
      $class  = substr($class, $last_namespace_position + 1); 
      $file  = str_replace('\\', DIRECTORY_SEPARATOR, $namespace).DIRECTORY_SEPARATOR; 
     } 

     $file .= str_replace('_', DIRECTORY_SEPARATOR, $class); 

     if ($path = Kohana::find_file($directory, $file)) 
     { 
      // Load the class file 
      require_once $path; 


      // Class has been found 
      return TRUE; 
     } 

     // Class is not in the filesystem 
     return FALSE; 
    } 

    /** 
    * Provides auto-loading support of classes that follow Kohana's old class 
    * naming conventions. 
    * 
    * This is included for compatibility purposes with older modules. 
    * 
    * @param string $class  Class name 
    * @param string $directory Directory to load from 
    * @return boolean 
    */ 
    public static function auto_load_lowercase($class, $directory = 'classes') 
    { 
     // Transform the class name into a path 

     $file = str_replace('_', DIRECTORY_SEPARATOR, strtolower($class)); 

     if ($path = Kohana::find_file($directory, $file)) 
     { 
      // Load the class file 
       require_once $path; 


      // Class has been found 
      return TRUE; 
     } 
     // Class is not in the filesystem 
     return FALSE; 
    } 

나는 class_exists()를 요구하기 전에() 추가 시도했지만 내가이 프로젝트를 시작하기 위해 무엇을해야 &를 작동하지 않는 이유는 무엇입니까?

+0

당신이'class_exists()'사용 전체 코드 예제를 게재 할 수 있습니까? –

답변

0

아마도 이미 필요한 클래스가 다른 파일에 이미 포함되어있을 수 있습니다. 난 당신이 수준의 충돌 문제를 확인하는 방법을 정확히 알 수는 없지만 같은 것을 수행해야합니다

function include_quietly($file) { 
$conflicts = false; 
$txt = file_get_contents($file); 
preg_match_all("#class\s+(\w+)\s*{#muis", $txt, $matches, PREG_SET_ORDER); 

foreach ($matches as $m) { 
    if (class_exists($m[1])) { 
    $conflicts = true; 
    break; 
    } 
} 

if (!$conflicts) 
    include_once $file; 
else 
    echo "include conflicts in file {$file}\n"; 
} 

include_quietly($path);