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下載。
任何人都可以提供有關這方面的見解可以完成?
獲取error_reporting工作。這將解決wsod。而且不需要靜態類,所以不要這樣做'$ self' funkiness ... – ircmaxell 2011-03-26 02:10:28