php自动加载
来源:互联网 发布:多益网络账号 编辑:程序博客网 时间:2024/05/21 07:56
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
初步的自动加载就完成了
- php 自动加载对象
- php自动加载源文件
- php自动加载
- PHP自动加载函数
- php自动加载
- PHP 自动加载
- php 自动加载类
- php自动加载
- php自动加载
- PHP自动加载类
- PHP自动加载
- php-自动加载对象
- PHP中的自动加载
- PHP自动加载
- PHP 自动加载类
- PHP 自动加载类
- php自动加载机制
- PHP 类自动加载
- main()方法为啥必须要public static void类型的??java中的静态成员
- 微博控的伤感日志分享:这样的伪装,很累很累
- Java:使用Executors创建和管理线程
- 买彩票啦
- How to schedule and get the report in SCOM2012
- php自动加载
- 【问题描述】1.创建单链表;2.然后删除重复的节点 ?
- 10条建议让你创建更好的jQuery插件
- .net获取客户端信息
- 最大子串和_1
- mastudio helloworld
- Linux 下查找大文件或目录
- jQuery基本原理
- 无法启动MySQL服务,报的错误:1067,进程意外终止(有图有真相)