页:
[1]
|
另类方法实现自动载入自定义函数文件auto_load_function
做大型项目时。需要准确地调用需要用到的函数,而不能包含数个函数而不管用不用得上,非常低效率。
这就需要一个规划。目录结构是规划的一个非常重要的组成部份。一般会用一个目录专门用来存放自定函数。自定义函数的文件名格式如:
function.get_ip.php函数名get_ip()与文件名对应
function.get_browser.php函数名get_browser()与文件名对应
function.size_readable.php函数名get_browser()与文件名对应
....
那么,如果需要使用到一个自定义函数时,一般都需要 include_once 自定义函数的文件名。然后执行相对应的自定义函数。这样一个反复的include操作,给编程带来一点不便。
如果,有象php5中的__autoload函数这样自动载入类文件,该多好呀!编程是多么愉块!
嗯,别急,慢慢来!
举个例子,看下面的这个函数。返回的是一个文件名,参数1及参数2。
文件名:function.b.php
[php]
function b($b1='1',$b2='2'){
$a .= 'function.b.php'."<br>";
$a .= 'b1:'.$b1."<br>";
$a .= 'b2:'.$b2."<br>";
return $a;
}
[/php]
[php]
class auto_load_function
{
var $pach;
//无此函数失败返回false
function r(){
$f = func_get_args();
$n = $this->pach.'function.'.$f['0'].'.php';
if(is_file($n)){
include_once($n);
return $f['0'] ( $f['1'], $f['2'], $f['3'], $f['4'], $f['5'], $f['6'], $f['7'], $f['8'], $f['9'], $f['10']);//预定10个参数,估计没几个人写的函数会超过10个参数的。如果真的超过10个参数,就自已加上去吧。
}
return false;
}
}
$r = new auto_load_function();
$r->path = './';
echo $r->r('b','cc','pp');//看到结果了吗?这句是关键,只一句就自动引入function.b.php函数文件并运行b()函数了,还可以传递参数cc与pp(参数可以是数组)。真是方便之极
[/php]
嗯,的确达php4中实现autoload自定义函数的目的 ! 很神奇吧?这是一种非常另类的用法! 在国内,还没有见过有实现这样的效果。在国外,也不知道有没有。
到底这样的技巧对你的编程有没有好处?自已取舍吧。 |
|
有几个传几个吧
auto_load_function::r('b', 'c', 'd') |
|
<?
/**
* 函数 调用文件
* 参数 未确定
* 返回 参数数组
*/
function m_include()
{
$param=func_get_args();
$filename=$param[0].".php";
if(!empty($param) && file_exists($filename))
{
include($filename);
array_shift($param);
return $param;
}
else
{
return false;
}
}
//调试
print_r(m_include("input","01.mp3","02.mp3","hml"));
没太明白,是不是这个意思。 |
| fcicqbbs | 2006-7-16 02:35 AM |
|
| 好象传递无限多也可以,并且不用数组. |
|
| 大家还没看明白。附个文件上来,应该会明白的。相信这个,是很有魅力的! |
|
看明白了,没有10个参数出不来10个,当然可以屏蔽错误 .
为调用一个函数而实例化一个类没必要,用static方法或直接用函数好些
常用的还是放一起吧,动态载入更慢
[[i] 本帖最后由 phphp 于 2006-7-16 06:11 PM 编辑 [/i]] |
|
| 再加个function_exists( $f[0] ) |
Powered by Discuz! Archiver 6.1.0
© 2001-2006 Comsenz Inc.
Processed in 0.006136 second(s), 2 queries |