页:
[1]
2
| xieaotian | 2008-4-1 01:40 AM |
|
PHP新特性,__autoload
因为创建PYTHON中国([url]www.okpython.com)[/url]和推广PYTHON,所以一直没时间去研究PHP5的特性,现在终于有时间了。
下面老老仙就给你讲解下__autoload函数的功能:
说明:自动加载类文件到本文件。
我们在用PHP4的时候一般用类的过程应该是这样的:
类文件加载require(类.php)
或include(类.php)
$test = new 类名
然后使用类方法。
php5以后就不用了,因为PHP5提供了一个简洁方便的方法,那就是autoload
具体举例说明:
test.php类文件(用与自动加载)
[php]<?PHP
class test{//类开始
function echo_str(){print "this is test files";}
}//类结束
?>[/php]
testone.php文件
[php]
<?PHP
$a = new test;
$a->echo_str();
function __autoload(strtolower($className)){ //strtolower是自动转化为小写字母(当然你可以不用strtolower,因为php5会自动将其转化为小写的)
require_once($className.".php"); //自动加载类文件,根据类的名称给予文件名(即为加载规则)
}
?>
[/php]
是不是很简单呢,但是你用到了autoload了吗,试试吧 |
|
速度如何?有测试过吗?有人说__autoload是遍历目录。。速度慢。。
不过我没测试过~~~麻烦比奶瓶还NP的老老仙给偶们测试下吧。。。 |
| xieaotian | 2008-4-1 05:14 AM |
|
只要目录文件不超过数以百计的类文件,效率不会受到太大影响.
PHP5推出这个功能,也考虑到针对项目的大小和方便性.可能有些项目不适用. |
| dreamblaze | 2008-4-1 08:03 AM |
|
打击盗版老仙
奶瓶老仙,乏力无鞭! |
| xieaotian | 2008-4-1 08:38 AM |
|
| 支持正版老老仙,NP老仙是我师傅的徒弟的徒弟的大哥的兄弟的师傅的徒弟.:lol |
| dreamblaze | 2008-4-1 08:49 AM |
|
[quote]原帖由 [i]niohe[/i] 于 2008-4-1 04:10 PM 发表
鹿鞭?
体乏无力? [/quote]
是露鞭,NP老干这事 |
|
__autoload()
其实还是指定路径加载比较方便
……
其实不就是判断类是否存在。不存在,尝试调用该函数读取类并加载。
这个函数最好是采用一下。相对比较方便 |
| xieaotian | 2008-4-22 12:28 AM |
|
:lol不过最近研究表明,它的速度上面有影响,所以大型网站可能不会采用.
而小型网站为了方便期间可以试采用. |
| xieaotian | 2008-4-22 04:06 AM |
|
| 顶下 |
| wanglong | 2008-4-22 05:53 PM |
|
| 我研究了很久的维基百科的那套程序,mediawiki,不算小项目了吧,他的所有的类就是按照需要通过路径加载过来的,所以我觉得效率应该没有什么问题 |
| xieaotian | 2008-4-23 12:17 AM |
|
| 谢谢支持:handshake |
|
__autoload不好
第一 autoload是个函数, 假如在写一些类库而使用这个函数, 感觉有点...不太和谐...
第二 可能对文档工具会不太友善
第三 假如autoload里载入的文件, 还有autoload, 就执行不了
相当于函数重定义.
而在有些需求里是需要这样做的.
比如类库目录
lib/
DbFactory.php
DbFactory/
mysql.php
pgsql.php
EntryFactory.php
EntryFactory/
webentry.php
clientry.php
这样假如我想自动载入xxxFactory, 并且还想继续自动载入mysql.php或pgsql.php, 用autoload就不好实现.
也就是说autoload是全局的. |
| xieaotian | 2008-5-22 05:43 AM |
|
| 楼上有理,不过有些外国网站经常用这个方法。 |
| xieaotian | 2008-5-24 05:12 AM |
|
| & |
|
| autoload的时候,用file_exist检测,避免遍历目录 |
Powered by Discuz! Archiver 6.1.0
© 2001-2006 Comsenz Inc.
Processed in 0.034087 second(s), 2 queries | |
|
|