2011-03-26 163 views
2

我正在研究一個將使用命名空間並完全依賴於PHP5.3的PHP數據映射器框架。爲了允許其他人使用框架並根據需要擴展其內部組件,我想支持一種動態自動加載的形式,它將首先從任何自定義名稱空間加載所請求的類文件,最後從框架名稱空間加載。動態加載命名空間類

到目前爲止,我有:

class Gacela { 

protected static $_instance; 

protected $_namespaces = array(); 

protected $_sources = array(); 

protected $_mappers = array(); 

protected $_resources = array(); 

protected function __construct() 
{ 
    spl_autoload_register(array(__CLASS__, 'autoload')); 

    $this->registerNamespace('Gacela', dirname(realpath(__FILE__))); 
} 

protected function _findFile($file) 
{ 
    if(file_exists($file) && is_readable($file)) { 
     return true; 
    } 

    return false; 
} 

public static function autoload($class) 
{ 
    $parts = explode("\\", $class); 
    $self = self::instance(); 
    $return = false; 

    if(isset($self->_namespaces[$parts[0]])) { 
     $file = $self->_namespaces[$parts[0]].str_replace("\\", "/", $class).'.php'; 

     if($self->_findFile($file)) { 
      $return = $class; 
     } 
    } else { 

     $namespaces = array_reverse($self->_namespaces); 

     foreach ($namespaces as $ns => $path) { 
      $file = $path.$ns.str_replace("\\", "/", $class).'.php'; 

      if($self->_findFile($file)) { 
       $return = $ns . $class; 
       break; 
      } 
     } 
    } 

    require $file; 

    return $return; 
} 

public static function instance() 
{ 
    if(is_null(self::$_instance)) { 
     self::$_instance = new Gacela(); 
    } 

    return self::$_instance; 
} 
} 

不幸的是,它只是一個白色畫面,每當我嘗試加載任何類吧。

如果您想查看完整的框架代碼,可以從github下載。

任何人都可以提供有關這方面的見解可以完成?

+0

獲取error_reporting工作。這將解決wsod。而且不需要靜態類,所以不要這樣做'$ self' funkiness ... – ircmaxell 2011-03-26 02:10:28

回答

0

你可以看看我前幾天提出的問題。答案將幫助你提高裝載機班。 Here