<?php
//实现自动加载
class Psr4autoload
{
//存放不守规矩的命名空间名字和路径
protected $namespaces = array();
public function register()
{
spl_autoload_register(array($this , 'loadClass'));
}
//处理类名字
public function loadClass($className)
{
//echo $className.'<br />'; ///Test\TestController
$pos = strrpos($className , '\\');
$namespace = substr($className , 0 , $pos+1); //Test\
$realClassName = substr($className , $pos+1); //TestController
$this->mapLoad($namespace , $realClassName);
}
//添加命名空间
public function addNamespace($namespace , $path)
{
//我要把他们放到一个数组里面去
//var_dump($namespace,$path);
$this->namespaces[$namespace][] = $path;
var_dump($this->namespaces);
}
//处理包含问题
public function mapLoad($namespace , $realClassName) //Test\ testController
{
//处理两种情况
if (isset($this->namespaces[$namespace]) == false) {
//守规矩的 命名空间名字能跟文件夹对应上
$path = $namespace . $realClassName . '.php';
$path = str_replace('\\' , '/' , $path);
$file = strtolower($path);
$this->requireFile($file);
} else {
//不守规矩
foreach ($this->namespaces[$namespace] as $path) {
//echo $path;
$file = $path . '/' . $realClassName . '.php';
$this->requireFile($file);
}
}
}
//执行包含
public function requireFile($file)
{
if (file_exists($file)) {
include $file;
return true;
}
return false;
}
}
$loader = new Psr4autoload();
$loader->register();
$loader->addNamespace('Controller\\' , 'app/controller');
//不守规矩
$c = new Controller\IndexController();
$c->index();
//守规矩
//$t = new Test\TestController();
//$t->show();
相关文章
- 55、android app借助友盟实现微信授权登录
- knockoutjs+ jquery pagination+asp.net web Api 实现无刷新列表页
- java+appium+安卓模拟器实现app自动化Demo
- TOSCA自动测试工具跟QTP 和 Selenium的简单对比
- python实现并发爬虫
- 微信订阅号开发之token验证后,自动回复消息功能做好,发送消息没有返回
- vim编辑下Python2.0自动补全
- 通过web sql实现增删查改
- (转)基于MVC4+EasyUI的Web开发框架经验总结(10)--在Web界面上实现数据的导入和导出
- MVC学习系列6--使用Ajax加载分部视图和Json格式的数据