博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
如何实现一个php框架系列文章【2】实现类的自动加载
阅读量:5134 次
发布时间:2019-06-13

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

根据前一篇文章的设计原则,我们暂时把php文件分为3类,类名和文件名都遵守如下约定。

 

 

 

  类名 文件名 路径
模型类m {$app}Mod  {$app}.mod.php {$app}/model  
控制器类c {$app}Ctl {$app}.ctl.php {$app}/control
其他 {$app} {$app}.cls.php {$app}/class

可以实现一个简单的autoload函数

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
function 
uct_autoload(
$class_name
) {
    
$auto_path 
array
(
        
'ctl' 
=> 
'control'
,
        
'mod' 
=> 
'model'
,
        
'cls' 
=> 
'class'
,        
    
);
    
$key       
strtolower
(
substr
(
$class_name
, -3));
    
if 
(isset(
$auto_path
[
$key
])) {
        
$dir 
$auto_path
[
$key
] . DS . 
strtolower
(
substr
(
$class_name
, 0, -3)) . 
'.' 
$key 
'.php'
;
    
else 
{
        
$dir 
'class' 
. DS . 
strtolower
(
$class_name
) . 
'.cls.php'
;
    
}   
   
    
if 
(!
empty
(
$GLOBALS
[
'_UCT'
][
'autoload'
])) {
        
foreach 
(
$GLOBALS
[
'_UCT'
][
'autoload'
as 
$app
) {
            
if 
(
file_exists
(UCT_PATH . 
'app' 
. DS . 
$app 
. DS . 
$dir
)) {
                
return 
include 
UCT_PATH . 
'app' 
. DS . 
$app 
. DS . 
$dir
;
            
}   
        
}   
    
}   
        
    
if 
(
file_exists
(UCT_PATH . 
'framework' 
. DS . 
$dir
)) {
        
return 
include 
UCT_PATH . 
'framework' 
. DS . 
$dir
;
    
}   
    
echo 
'auto_load not found! ' 
$class_name
;
    
exit
(1);
}

 

如果想使用另一个模块里的函数可以使用

1
2
3
4
5
6
7
8
9
10
11
12
13
14
function 
uct_use_app(
$app
) {
    
if 
(
empty
(
$GLOBALS
[
'_UCT'
][
'autoload'
])) {
        
$GLOBALS
[
'_UCT'
][
'autoload'
] = 
array
(
            
$app
        
);
        
return 
true;
    
}
    
if 
(!in_array(
$app
$GLOBALS
[
'_UCT'
][
'autoload'
])) {
        
array_unshift
(
$GLOBALS
[
'_UCT'
][
'autoload'
], 
$app
);
        
return 
true;
    
}
    
    
return 
false;
}

 

 

转载于:https://www.cnblogs.com/yyluming/p/5171098.html

你可能感兴趣的文章
django高级应用(分页功能)
查看>>
【转】Linux之printf命令
查看>>
关于PHP会话:session和cookie
查看>>
STM32F10x_RTC秒中断
查看>>
display:none和visiblity:hidden区别
查看>>
C#double转化成字符串 保留小数位数, 不以科学计数法的形式出现。
查看>>
牛的障碍Cow Steeplechase
查看>>
Zookeeper选举算法原理
查看>>
3月29日AM
查看>>
利用IP地址查询接口来查询IP归属地
查看>>
HTML元素定义 ID,Class,Style的优先级
查看>>
构造者模式
查看>>
http和https的区别
查看>>
Hbuild在线云ios打包失败,提示BuildConfigure Failed 31013 App Store 图标 未找到 解决方法...
查看>>
找到树中指定id的所有父节点
查看>>
今天新开通了博客
查看>>
AS3优化性能笔记二
查看>>
ElasticSearch(站内搜索)
查看>>
4----COM:a Generative Model for group recommendation(组推荐的一种生成模型)
查看>>
UVA 11137 - Ingenuous Cubrency
查看>>