喜悦国际村 » 喜悦原创 » PHP新特性,__autoload

页: [1] 2
xieaotian2008-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了吗,试试吧

菜刀七少2008-4-1 03:43 AM
速度如何?有测试过吗?有人说__autoload是遍历目录。。速度慢。。
不过我没测试过~~~麻烦比奶瓶还NP的老老仙给偶们测试下吧。。。

xieaotian2008-4-1 05:14 AM
只要目录文件不超过数以百计的类文件,效率不会受到太大影响.
PHP5推出这个功能,也考虑到针对项目的大小和方便性.可能有些项目不适用.

dreamblaze2008-4-1 08:03 AM
打击盗版老仙
奶瓶老仙,乏力无鞭!

niohe2008-4-1 08:10 AM
鹿鞭?
体乏无力?

xieaotian2008-4-1 08:38 AM
支持正版老老仙,NP老仙是我师傅的徒弟的徒弟的大哥的兄弟的师傅的徒弟.:lol

dreamblaze2008-4-1 08:49 AM
[quote]原帖由 [i]niohe[/i] 于 2008-4-1 04:10 PM 发表
鹿鞭?
体乏无力? [/quote]
是露鞭,NP老干这事

gouki2008-4-21 04:08 PM
__autoload()
其实还是指定路径加载比较方便
……
其实不就是判断类是否存在。不存在,尝试调用该函数读取类并加载。
这个函数最好是采用一下。相对比较方便

xieaotian2008-4-22 12:28 AM
:lol不过最近研究表明,它的速度上面有影响,所以大型网站可能不会采用.
而小型网站为了方便期间可以试采用.

xieaotian2008-4-22 04:06 AM
顶下

wleige2008-4-22 06:34 AM
其它新特性呢,也介绍一下吧

wanglong2008-4-22 05:53 PM
我研究了很久的维基百科的那套程序,mediawiki,不算小项目了吧,他的所有的类就是按照需要通过路径加载过来的,所以我觉得效率应该没有什么问题

xieaotian2008-4-23 12:17 AM
谢谢支持:handshake

剑枫2008-5-5 06:07 AM
兼容问题阿,写法还停留在php4

yarco2008-5-22 04:50 AM
__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是全局的.

xieaotian2008-5-22 05:43 AM
楼上有理,不过有些外国网站经常用这个方法。

芽雨2008-5-22 07:46 AM
能否介绍一下$className变量

weird2008-5-23 05:45 AM
赞 一个!

xieaotian2008-5-24 05:12 AM
&

孙小二2008-5-25 02:37 PM
autoload的时候,用file_exist检测,避免遍历目录


查看完整版本: PHP新特性,__autoload


Powered by Discuz! Archiver 6.1.0  © 2001-2006 Comsenz Inc.
Processed in 0.034087 second(s), 2 queries