博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
php自动加载
阅读量:6180 次
发布时间:2019-06-21

本文共 2238 字,大约阅读时间需要 7 分钟。

php自动载方法有两种.

第一种方案用__autoload,这个函数较简单,也较弱.

但有一问题没有解决, 就是在include前判断文件是否存在的问题.

1
2
3
4
5
6
7
8
9
10
11
12
13
set_include_path(
'aa' 
. PATH_SEPARATOR . get_include_path());
function 
__autoload(
$className
)
{
    
//如果加这个检测, 因为此文件不在当前目录下,它就会检测不到文件存在,
   
//但include是能成功的
    
if 
(
file_exists
(
$className 
.
'.php'
)) {
 
  
include_once
(
$className 
.
'.php'
);
    
}
else 
{
        
exit
(
'no file'
);
    
}
}
 
$a 
=
new 
Acls();

第二种方案用spl自动加载,这里具体说一下这个.

spl_autoload_register()

一个简单的例子

1
2
3
4
5
6
7
8
9
10
11
12
13
set_include_path(
'aa' 
. PATH_SEPARATOR . get_include_path());
//function __autoload($className)
//{
//    if (file_exists($className . '.php')) {
//        include_once($className . '.php');
//    } else {
//        exit('no file');
//    }
//}
 
spl_autoload_register();
 
$a 
=
new 
Acls();

spl_autoload_register()会自动先调用spl_autoload()在路径中查找具有小写文件名的".php"程序.默认查找的扩展名还有".ini",还可以用spl_autoload_extenstions()注册扩展名.

在找不到的清况下,还可以通过自己定义函数查找

function loader1($class)

{

//自己写一些加载的代码

}

function loader2($class)

{

//当loader1()找不到时,我来找

}

spl_autoload_register('loader1');

spl_autoload_register('loader2');

还可以更多........

MVC框架是如何实现自动加载的

首先设置路径

    'include' => array(
        'application/catalog/controllers',
        'application/catalog/models',    
    ),

$include = array('application/controllers', 'application/models', 'application/library');

set_include_path(get_include_path() . PATH_SEPARATOR .implode(PATH_SEPARATOR, $config['include']));

在获取URL,解析出控制器与方法.

然后设置自动加载

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
class 
Loader
{
    
/**
     
* 自动加载类
     
* @param $class 类名
     
*/
    
public 
static 
function 
autoload(
$class
)
    
{
        
$path 
=
''
;
            
$path 
=
str_replace
(
'_'
,
'/'
,
$class
) .
'.php'
;
        
include_once
(
$path
);
    
}
}
 
/**
 
* sql自动加载
 
*/
spl_autoload_register(
array
(
'Loader'
,
'autoload'
));
路由,实例化控制器,调用方法,你写的东西就开始执行了
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
/**
 
* 路由
 
*/
public 
function 
route()
{
    
if 
(
class_exists
(
$this
->getController())) {
        
$rc 
=
new 
ReflectionClass(
$this
->getController());
        
if 
(
$rc
->hasMethod(
$this
->getAction())) {
            
$controller 
=
$rc
->newInstance();
            
$method 
=
$rc
->getMethod(
$this
->getAction());
            
$method
->invoke(
$controller
);
        
}
else
            
throw 
new 
Exception(
'no action'
);
    
}
else
        
throw 
new 
Exception(
'no controller'
);
}
1
 
1
初步的自动加载就完成了

 

http://www.cnblogs.com/yuxing/archive/2010/06/19/1760742.html

你可能感兴趣的文章
校园社交网站app
查看>>
如何指定某些文件关闭ARC
查看>>
4、跃进表
查看>>
JAVA面向对象的总结(静态函数与static关键字)
查看>>
课堂作业第四周课上作业一
查看>>
使用Java语言开发微信公众平台(七)——音乐消息的回复
查看>>
陶哲轩实分析习题9.1.6
查看>>
常用音频软件:Cool edit pro
查看>>
努力的方向,除了诗和远方,还有一堆技术。
查看>>
SQL CHECK 约束
查看>>
git提交到一半关闭时
查看>>
WMware 10 Ubuntu 12.04 进入Unity模式
查看>>
简单通用的访问CVS的方法
查看>>
kbengine mmo源码(完整服务端源码+资源+完整客户端源码)
查看>>
【操作系统】实验四 主存空间的分配和回收
查看>>
Log4j 配置 的webAppRootKey参数问题
查看>>
VMware ESXi 5.0中时间配置中NTP设置
查看>>
C++中memset()函数笔记
查看>>
oracle sql 数结构表id降序
查看>>
使用cnpm加速npm
查看>>