php自动载方法有两种.
但有一问题没有解决, 就是在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/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自动载方法有两种.的更多相关文章
- python第三方包安装方法(两种方法)
具体有以下两种方法: 第一种方法(不使用pip或者easy_install): Step1:在网上找到的需要的包,下载下来.eg. rsa-3.1.4.tar.gz Step2:解压缩该文件. Ste ...
- Spring容器自动调用方法的两种方式
先看一个Spring中Bean的实例化过程: 1.配置文件中指定Bean的init-method参数 <bean class="com.jts.service.UserService& ...
- 在IDEA中将项目部署到Tomcat的方法及两种模式的区别
转自:https://www.jianshu.com/p/fb0ed26c35d5 1.添加tomcat服务器 点右上角编辑配置 编辑配置 点击左上角+选择tomcat服务器 添加tomcat ...
- Android Studio无法预览xml布局之解决方法(两种)
学习安卓程序开发,用的Android Studio,发现怎么更改xml代码都没有想要的效果.如图 代码如下: <?xml version="1.0" encoding=&qu ...
- react添加方法的两种形式
1.使用bind <button onClick={this.test.bind(this)}>确定</button> 2.使用箭头函数 <button onClick= ...
- js数组常用添加方法有两种
//头部 //this.list.unshift({name:this.itemName,date:new Date()}); //尾部 this.list.p ...
- Java并发编程(一) 两种实现多线程的方法(Thread,Runnable)
Java中实现多线程的方法有两种: 继承Thread类和实现Runnable方法,并重写Run方法,然后调用start()方法启动线程.使用Runnable会比Thread要好很多,主要是以下三个原因 ...
- js设置控件的隐藏与显示的两种方法
js设置控件的隐藏与显示,设置控件style的display和visibility属性就可以了,下面有个示例,需要的朋友可以参考下用JavaScript隐藏控件的方法有两种,分别是通过设置控件的sty ...
- AutoCAD.NET二次开发:创建自定义菜单的两种方法比较
目前我已经掌握的创建CAD菜单方法有两种: COM方式: http://www.cnblogs.com/bomb12138/p/3607929.html CUI方式: http://www.cnblo ...
随机推荐
- 几个用Python实现的简单算法
一.算法题目:有1.2.3.4个数字,能组成多少个互不相同且无重复数字的三位数?都是多少? 程序分析:可填在百位.十位.个位的数字都是1.2.3.4.组成所有的排列后再去 掉不满足条件的排列. 程序源 ...
- Swagger与SpringMVC项目整合
Swagger与SpringMVC项目整合 来源:http://www.2cto.com/kf/201502/376959.html 为了方便的管理项目中API接口,在网上找了好多关于API接口管理的 ...
- JavaScript数据结构-9.循环链表
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...
- orcale 之游标的属性
无论是显式游标还是隐式游标都会有四个属性分别是:%ISOPEN.%FOUND.%NOTFOUND.%ROWCOUNT 下面我们分别对着几种属性进行分析. %FOUND 该属性表示当前游标是否指向有效的 ...
- springboot主从数据库
是从springmvc的思路上来做的,主要就是配置主.从DataSource,再继承AbstractRoutingDataSource,重写determineCurrentLookupKey方法,通过 ...
- 吴恩达《深度学习》第五门课(1)循环序列模型(RNN)
1.1为什么选择序列模型 (1)序列模型广泛应用于语音识别,音乐生成,情感分析,DNA序列分析,机器翻译,视频行为识别,命名实体识别等众多领域. (2)上面那些问题可以看成使用(x,y)作为训练集的监 ...
- eclipse下JAVA的搭建
练手JAVA用eclipse比android studio快很多,android studio啥都好,就是太慢 参考资料:http://blog.csdn.net/21aspnet/article/d ...
- WCF-绑定模型(二)
二.绑定元素 每一个类型的绑定最重要的就是绑定元素了,每个绑定的功能特性都由绑定元素决定.BasicHttpBinding由用于编码的TextMessageEncodingBindingElement ...
- 微信WeUI基础
首先引入样式css和js 虽然基础的其实还有weui.min.css,但是为了一些动态效果,也要引入其他的东西. 基本框架 <!DOCTYPE html> <html lang=&q ...
- 来一波Linux中查看cpu、磁盘、内存、网络的命令
转载请注明出处. 如果想远程管理服务器就有远程管理卡,比如Dell idRAC,HP ILO,IBM IMM 查看硬件的温度/风扇转速,电脑有撸大师,服务器就有ipmitool.使用ipmitool实 ...