Php 动态加载命名空间类
我正在为PHP开发一个数据映射器框架,它将使用名称空间并完全依赖于PHP5.3。为了允许其他人使用框架并根据需要扩展其内部组件,我想支持一种动态自动加载形式,它将首先从任何自定义名称空间加载请求的类文件,最后从框架名称空间加载 到目前为止,我已经:Php 动态加载命名空间类,php,dynamic,namespaces,php-5.3,autoload,Php,Dynamic,Namespaces,Php 5.3,Autoload,我正在为PHP开发一个数据映射器框架,它将使用名称空间并完全依赖于PHP5.3。为了允许其他人使用框架并根据需要扩展其内部组件,我想支持一种动态自动加载形式,它将首先从任何自定义名称空间加载请求的类文件,最后从框架名称空间加载 到目前为止,我已经: class Gacela { protected static $_instance; protected $_namespaces = array(); protected $_sources = array(); protected $_
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;
}
}
不幸的是,每当我试图用它加载任何类时,它都会变成一个白色屏幕
如果您想查看完整的框架代码,可以从下载
有人能提供这方面的见解吗?你可以看看我几天前问的问题。答案将帮助你提高你的加载器等级。
你可以看看我几天前问的问题。答案将帮助你提高你的加载器等级。
获取错误报告工作。这将解决wsod问题。而且不需要静态类,所以不要这样做
$self
funkiness…让错误报告工作起来。这将解决wsod问题。而且不需要静态类,所以不要这样做$self
有趣。。。