• PHP 实现自动加载器(Autoloader)


       我们知道PHP可以实现自动加载,避免了繁重的体力活,代码更规范,整洁。那如果我们把这个自动加载再升华一下,变成自动加载类,每次只需要引入这个类,那么其他类就自动加载了,已经开源,仓库地址在这里。同时如果加载后可以使其常驻内存,那么效率又高了。。。

    关于自动的基础部分在前一篇博客(http://www.cnblogs.com/CpNice/p/4119925.html);

    下面有几点需要注意

    1.为了实现通用性,设置一个根目录,在大型项目中,目录结构比较复杂,每次加载都应该有一个起始开始的目录位置,这样才能向后兼容。当然也可以设置多个这种目录,放到数组里。

    2.带有命名空间的类,需要把转义符转换成表示目录结构的斜线,加载的类是带有命名空间的,因为,该类是属于该命名空间下。(从上一篇博客就可以知道)

    好了,下面贴上代码

     1 <?php
     2 
     3 if(!defined('ROOTDIR'))
     4 {
     5         define('ROOTDIR',realpath(__DIR__.'/../'));   //定义更目录
     6 }
     7 class Autoloader {
     8         
     9         public static function myAutoload( $name )
    10         {
    11                 $class_path = str_replace('\',DIRECTORY_SEPARATOR,$name);
    12                 $file = ROOTDIR.'/'.$class_path.'.php';
    13                 if( file_exists( $file ) )
    14                 {
    15                         require_once( $file );
    16                         if( class_exists($name, false) )
    17                         {
    18                                 return true;
    19                         }
    20                 }
    21                 return false;
    22         }
    23 }
    24 spl_autoload_register('Autoloader::myAutoload');

    自动加载的使用必须显示加载,它是加载其他类的加载器,我们已经重载了PHP的自动加载没有机制可以加载这个Autoloader,所以要 require_once('Autoloader.php');

    很简单吧,其实这个可以做的更强大。

    比如,我把这个做成一个中间件,命名为Bootstrap,这个可以用于不同项目,而这些项目可以位于不同或者同一个WEB目录下,这时需要一个静态的属性表示所有可能的应用目录或者不同WEB目录

    1 public static $rootPath = array();

    在加载时,就需要一个循环遍历每一个可能的目录,找到即加载。

    同时,我们可以设置一个 setRootPath() 方法,用于设置不同项目的目录。

    public function setRootPath( $path )
    {
            //do something
            return $this;
    }

    这样就能实现链式操作的添加,个人觉得比较神奇。。。

    OK,关于自动加载就写到这里,欢迎各位看官拍砖。

  • 相关阅读:
    面向复杂应用,Node.js中的IoC容器 -- Rockerjs/core
    一步步学会用docker部署应用(nodejs版)
    nodeEE双写与分布式事务要点一二
    提升node.js中使用redis的性能
    puppeteer实现线上服务器任意区域截图
    Nodejs“实现”Dubbo Provider
    TypeScript入门教程
    node.js与比特币(typescript实现)
    关于首屏时间采集自动化的解决方案
    回顾2017,未来仍需要不停充电
  • 原文地址:https://www.cnblogs.com/CpNice/p/4369399.html
Copyright © 2020-2023  润新知