php自动加载
来源:互联网 发布:centos iso镜像下载32 编辑:程序博客网 时间:2024/05/18 02:00
很多开发者写面向对象的应用程序时对每个类的定义建立一个 PHP 源文件。一个很大的烦恼是不得不在每个脚本(每个类一个文件)开头写一个长长的包含文件列表。
在 PHP 5 中,不再需要这样了。可以定义一个 __autoload 函数,它会在试图使用尚未被定义的类时自动调用。通过调用此函数,脚本引擎在 PHP 出错失败前有了最后一个机会加载所需的类。
http://www.php.net/manual/zh/language.oop5.autoload.php
使用良好定义的自动加载,你无需担心一个类文件相对于当前类文件的什么位置;你只要简单的使用这个类,自动加载器将会执行文件查找任务。
另外,自动加载,因为它直到最后一刻才载入并确信匹配只出现一次,是一次巨大的性能提升——特别是在你部署之前如果花时间清除require_once()调用的时候
Zend Framework鼓励使用自动加载,并提供许多工具提供库代码和应用程序代码的自动加载
php自动载方法有两种.
第一种方案用__autoload,这个函数较简单,也较弱.
但有一问题没有解决, 就是在include前判断文件是否存在的问题.
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()
一个简单的例子
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,解析出控制器与方法.
然后设置自动加载
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'));
/** * 路由 */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');}
- php 自动加载对象
- php自动加载源文件
- php自动加载
- PHP自动加载函数
- php自动加载
- PHP 自动加载
- php 自动加载类
- php自动加载
- php自动加载
- PHP自动加载类
- PHP自动加载
- php-自动加载对象
- PHP中的自动加载
- PHP自动加载
- PHP 自动加载类
- PHP 自动加载类
- php自动加载机制
- PHP 类自动加载
- Web-Server 中 PHP 的两种工作方式
- COM三大接口:IUnknown、IClassFactory、IDispatch。
- PHP工作原理
- Openfire MultiUserChat 多用户聊天 ---创建聊天室
- android 横竖屏切换,activity的生命周期
- php自动加载
- 浅析linux下鼠标驱动的实现
- 記第n次敗仗後
- 搜索引擎算法研究专题一:基于页面分块的搜索引擎排序算法改进
- 网络设备初始化
- VBA入门代码尝试。
- 用GridView实现Gallery的效果
- 职业规划的困惑
- 学习java一个半月以来的心得--给初学者的一些建议