php 自动加载类
来源:互联网 发布:mac自带p图软件 编辑:程序博客网 时间:2024/05/21 14:48
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
初步的自动加载就完成了
- php 自动加载类
- PHP自动加载类
- PHP 自动加载类
- PHP 自动加载类
- PHP 类自动加载
- PHP自动加载类
- php自动加载类
- PHP:自动加载类
- PHP类的自动加载
- php类自动加载机制
- php的自动加载类
- 65. PHP 自动加载类
- php类的自动加载
- php自动加载类 Test
- PHP类的自动加载
- PHP - 类自动加载机制
- php实现自动加载类
- PHP类的自动加载
- 【SPLAY】SPOJ1470维护数列
- Perl: 同时在屏幕和文件打印输出
- 内存数据与plist文件中的数据不同步引起的问题
- overlay中的输入和输出
- Spring3 整合 Mybatis3
- php 自动加载类
- Windows8 安装步骤
- 读书
- 字符设备驱动模板
- Windows CE下流驱动的动态加载
- 找出最小的k个元素,不需要按顺序输出。已知k很小。在k小到一定程度的时候,有比大顶堆更快的方法。
- 分组对称加密模式:ECB/CBC/CFB/OFB .
- 用R语言实现向量化与并行计算
- WINCE6.0 DM.EXE 激活驱动失败的原因之一