但有一問題沒有解決, 就是在include前判斷文件是否存在的問題.php
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自動加載,這裏具體說一下這個.sql
spl_autoload_register()app
一個簡單的例子框架
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()註冊擴展名.函數
在找不到的清況下,還能夠經過本身定義函數查找this
如spa
function loader1($class)code
{ci
//本身寫一些加載的代碼路由
}
function loader2($class)
{
//當loader1()找不到時,我來找
}
spl_autoload_register('loader1');
spl_autoload_register('loader2');
還能夠更多........
MVC框架是如何實現自動加載的
首先設置路徑
$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
|
初步的自動加載就完成了
|