php自动加载的两种实现方法

2015-01-24信息快讯网

php自动加载的两种实现方法,需要的朋友可以参考下。

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/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,解析出控制器与方法.
然后设置自动加载
 
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 中检查或过滤IP地址的实现代码
PHP中usort在值相同时改变原始位置问题的解决方法
PHP中strtotime函数使用方法详解
遍历指定目录下的所有目录和文件的php代码
用PHP写的基于Memcache的Queue实现代码
php中XMLHttpRequest(Ajax)不能设置自定义的Referer的解决方法
Linux fgetcsv取得的数组元素为空字符串的解决方法
PHP中其实也可以用方法链
PHP FOR MYSQL 代码生成助手(根据Mysql里的字段自动生成类文件的)
php懒人函数 自动添加数据
php新建文件自动编号的思路与实现
php中通过虚代理实现延迟加载的实现代码
ThinkPHP自动验证失败的解决方法
php自动获取字符串编码函数mb_detect_encoding
PHP的autoload自动加载机制使用说明
php include加载文件两种方式效率比较
php $_SERVER["REQUEST_URI"]获取值的通用解决方法
PHP定时自动生成静态HTML的实现代码
PHP XML操作的各种方法解析(比较详细)
PHP操作xml代码
PHP XML error parsing SOAP payload on line 1
PHP zlib扩展实现页面GZIP压缩输出
joomla内置的表单验证功能使用方法
实战mysql导出中文乱码及phpmyadmin导入中文乱码的解决方法
php获取当前网址url并替换参数或网址的方法
phpmyadmin里面导入sql语句格式的大量数据的方法
php 网页播放器用来播放在线视频的代码(自动判断并选择视频文件类型)
处理php自动反斜杠的函数代码
PHP小程序自动提交到自助友情连接
用mysql触发器自动更新memcache的实现代码
php面向对象全攻略 (十七) 自动加载类
©2014-2024 dbsqp.com