手机浏览 RSS 2.0 订阅 膘叔的简单人生 , 腾讯云RDS购买 | 超便宜的Vultr , 注册 | 登陆

在手册上看到的spl_autoload

首页 > PHP >

在手册上看到的,原文地址为:http://cn.php.net/manual/en/function.spl-autoload.php

很吃惊,原来,在默认情况下,spl_autoload的效率并不高?
我没有测试,原文测试的时间在07年,不知道现在的效率怎么样了。以后有空的时候测试一下。。。
以下是原文:
Note that, the orders of file extensions is important for performance. You should make the priority of your favourite file extension higest or use only one extension for your class files. Check out this example:

Some class files:

ClassA.php

PHP代码
  1. <?php class ClassA { var $val = 'Hello from class "ClassA"'; } ?>  

ClassB.php
PHP代码
  1. <?php class ClassB { var $val = 'Hello from class "ClassB"'; } ?>  

ClassC.php
PHP代码
  1. <?php class ClassC { var $val = 'Hello from class "ClassC"'; } ?>  

ClassD.php
PHP代码
  1. <?php class ClassD { var $val = 'Hello from class "ClassD"'; } ?>  

ClassE.php
PHP代码
  1. <?php class ClassE { var $val = 'Hello from class "ClassE"'; } ?>  


1. Simple:
PHP代码
  1. <?php  
  2. // default priority: .inc .php  
  3. for($n=65; $n<70; $n++) {  
  4.     $className = 'Class'.chr($n);  
  5.     spl_autoload($className);  
  6.     $ins = new $className;  
  7.     echo $ins->val.'<br>';  
  8. }  
  9. // 4.2 miliseconds  
  10. ?>  


2. Change priority:
PHP代码
  1. <?php  
  2. spl_autoload_extensions('.php,.inc');  
  3. // new priority: .php .inc  
  4. for($n=65; $n<70; $n++) {  
  5.     $className = 'Class'.chr($n);  
  6.     spl_autoload($className);  
  7.     $ins = new $className;  
  8.     echo $ins->val.'<br>';  
  9. }  
  10. // 1.4 miliseconds  
  11. ?>  


Or you can use this simple function that runs a bit faster for the extensions with lower priority :)
PHP代码
  1. <?php  
  2. function my_autoload($className$extList='.inc,.php') {  
  3.     $ext = explode(',',$extList);  
  4.     foreach($ext as $x) {  
  5.         $fname = $className.$x;  
  6.         if(@file_exists($fname)) {  
  7.             require_once($fname);  
  8.             return true;  
  9.         }  
  10.     }  
  11.     return false;  
  12. }  
  13.   
  14. for($n=65; $n<70; $n++) {  
  15.     $className = 'Class'.chr($n);  
  16.     my_autoload($className);  
  17.     $ins = new $className;  
  18.     echo $ins->val.'<br>';  
  19. }  
  20. // 2.6 miliseconds  
  21. ?>  

---
Safak Ozpinar - Istanbul University, Computer Engineering




本站采用创作共享版权协议, 要求署名、非商业和保持一致. 本站欢迎任何非商业应用的转载, 但须注明出自"易栈网-膘叔", 保留原始链接, 此外还必须标注原文标题和链接.

Tags: spl_autoload

« 上一篇 | 下一篇 »

2条记录访客评论

汗死。。。

这玩意其实也只是个加载顺序而己。。

Post by gouki on 2009, October 30, 11:41 AM 引用此文发表评论 #1

膘叔好强,最近我才接触到的一些关于PHP高级点的东西,你早就有了,在GOOGLE上搜索都来几次了

Post by Cherry on 2009, October 29, 4:41 PM 引用此文发表评论 #2


发表评论

评论内容 (必填):