频道栏目
首页 > 资讯 > 面向对象 > 正文

PHP autoload实现自动加载类

16-01-07        来源:[db:作者]  
收藏   我要投稿

autoload机制可以使得PHP程序有可能在使用类时才自动包含类文件,而不是一开始就将所有的类文件include进来,这种机制也称为lazy loading。

下面是使用autoload机制加载Person类的例子,代码如下:

  1. /*autoload.php*/ function__autoload($classname){ require_once($classname.“class.php”);
  2. } $person=newPerson(”Altair”,6);
  3. var_dump($person); ?>

PHP的autoload机制的实现,要在PHP中实现自动加载类,那就要说到一个魔术方法了,__autoload();这是PHP5添加的自动加载类方法,只要定义了该函数,那么如果PHP运行到该类找不到时,就会根据__autoload的规则去寻找。

自己也规划一下,跟set_include_path和get_include_path来配合使用,使自动加载类更完善点,代码飙一下(模仿magento的),代码如下:

  1. $paths[]=BP.DS.‘app’.DS.‘local’; $paths[]=BP.DS.‘app’.DS.‘base’;
  2. $paths[]=BP.DS.‘lib’; $appPath=implode(PS,$paths);
  3. set_include_path($appPath.PS.get_include_path());

这样就可以为PHP添加默认的类加载环境,这里只是把路径添加到了PHP环境,如果还要继续添加规则,可以再定义__autoload函数,不过我这里是对象使用的,就换了一种方法:spl_autoload_register方法,下面是自己根据magento的规则,自己弄了一套,其实跟magento差不多,代码如下:

  1. classAutoload{ /**
  2. *自身对象 *
  3. */ protectedstatic$_instance=null;
  4. publicfunction__construct(){ }
  5. /* *实例化自身
  6. * */
  7. publicstaticfunctioninstance(){ if(null==self::$_instance){
  8. self::$_instance=newself(); }
  9. returnself::$_instance; }
  10. /** *
  11. *注册自动加载函数 */
  12. publicstaticfunctionregister(){ spl_autoload_register(array(self::instance(),‘autoload’));
  13. } /*
  14. * *自动加载类
  15. */ publicfunctionautoload($class){
  16. if(!is_string($class)){ return;
  17. } $classFile=str_replace(‘‘,DS,ucwords(str_replace(‘_’,‘‘,$class)));
  18. $classFile.=‘.php’; returninclude$classFile;
  19. } }
相关TAG标签
上一篇:PHP中MVC框架之文件入口实例详解
下一篇:php __call方法使用说明
相关文章
图文推荐

关于我们 | 联系我们 | 广告服务 | 投资合作 | 版权申明 | 在线帮助 | 网站地图 | 作品发布 | Vip技术培训 | 举报中心

版权所有: 红黑联盟--致力于做实用的IT技术学习网站