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

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

下面有几点需要注意

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

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

好了,下面贴上代码

 <?php

 if(!defined('ROOTDIR'))
{
define('ROOTDIR',realpath(__DIR__.'/../')); //定义更目录
}
class Autoloader { public static function myAutoload( $name )
{
$class_path = str_replace('\\',DIRECTORY_SEPARATOR,$name);
$file = ROOTDIR.'/'.$class_path.'.php';
if( file_exists( $file ) )
{
require_once( $file );
if( class_exists($name, false) )
{
return true;
}
}
return false;
}
}
spl_autoload_register('Autoloader::myAutoload');

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

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

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

 public static $rootPath = array();

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

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

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

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

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

PHP 实现自动加载器(Autoloader)的更多相关文章

  1. 【PHP系列】PHP推荐标准之PSR-4,自动加载器策略

    接上回的继续说,上回说到PSR-3日志记录器接口,这回我们来说说PSR的最后一个标准,PSR-4,自动加载器策略. 缘由 自动加载器策略是指,在运行时按需查找PHP类.接口或性状,并将其载入PHP解释 ...

  2. PSR-4 自动加载器

    div,span,applet,object,iframe,h1,h2,h3,h4,h5,h6,p,blockquote,pre,a,abbr,acronym,address,big,cite,cod ...

  3. PHP PSR-4 Autoloader 自动加载(中文版)

    Autoloader 关键词 “必须”("MUST").“一定不可/一定不能”("MUST NOT").“需要”("REQUIRED"). ...

  4. PHP 自动加载规范PSR-4

    .note-content { font-family: "Helvetica Neue", Arial, "Hiragino Sans GB", STHeit ...

  5. Yaf零基础学习总结5-Yaf类的自动加载

    Yaf零基础学习总结5-Yaf类的自动加载 框架的一个重要功能就是类的自动加载了,在第一个demo的时候我们就约定自己的项目的目录结构,框架就基于这个目录结构来自动加载需要的类文件. Yaf在自启动的 ...

  6. 【PSR规范专题(5)】PSR-4 改进后的自动加载规范

    本文转自: https://github.com/PizzaLiu/PHP-FIG/blob/master/PSR-4-autoloader-cn.md 关键词 "必须"(&quo ...

  7. Phalcon自动加载(PHP自动加载)

    自动加载(phalcon\Loader) 转载请注明来源 一.php文件引入 通过 include() 或 require() 函数,可以在PHP程序执行之前在该文件中插入一个文件的内容. 区别:处理 ...

  8. PSR-4 规范实例讲解 -- php 自动加载

    参考 参考文档:https://www.kancloud.cn/thinkphp/php-fig-psr/3144 参考实例:https://github.com/php-fig/fig-standa ...

  9. 深入解析 composer 的自动加载原理 (转)

    深入解析 composer 的自动加载原理 转自:https://segmentfault.com/a/1190000014948542 前言 PHP 自5.3的版本之后,已经重焕新生,命名空间.性状 ...

随机推荐

  1. Dynamips GNS3

    https://baike.baidu.com/item/dynamips Dynamips的原始名称为Cisco 7200 Simulator,源于Christophe Fillot在2005年8月 ...

  2. produces在@requestMapping中的使用方式和作用

    produces可能不算一个注解,因为什么呢,它是注解@requestMapping注解里面的属性项, 它的作用是指定返回值类型,不但可以设置返回值类型还可以设定返回值的字符编码: 还有一个属性与其对 ...

  3. [Postgres] Create a Postgres Table

    Learn how to create a table using the most widely-used data types (serial, varchar, integer, float, ...

  4. [React Native] Writing Platform-Specific Components for iOS and Android in React Native

    Learn to write components that render differently on iOS and Android, but present the same API. Firs ...

  5. 卷积神经网络Lenet-5实现

    卷积神经网络Lenet-5实现 原文地址:http://blog.csdn.net/hjimce/article/details/47323463 作者:hjimce 卷积神经网络算法是n年前就有的算 ...

  6. SpringMVC大坑一枚:ContentNegotiatingViewResolver可能不利于SEO

    广大站长都有关注自己网站被搜索引擎收录的习惯,最近用百度.360等搜索引擎,查看了自己网站的一些情况,使用命令"site:fansunion.cn". 我发现了一些异常信息,不止一 ...

  7. python 单向循环列表

    # -*- coding: utf-8 -*- # @author: Tele # @Time : 2019/04/23 下午 6:54 # 单向循环列表 # 单向循环列表与单向列表的不同之处在于最后 ...

  8. SpringBoot项目优化和Jvm调优(楼主亲测,真实有效)

    项目调优 作为一名工程师,项目调优这事,是必须得熟练掌握的事情. 在SpringBoot项目中,调优主要通过配置文件和配置JVM的参数的方式进行. 在这边有一篇比较好的文章,推荐给大家! Spring ...

  9. 【17.00%】【codeforces 621D】Rat Kwesh and Cheese

    time limit per test2 seconds memory limit per test256 megabytes inputstandard input outputstandard o ...

  10. mac在终端打开应用程序

    今天研究了下mac终端的启动流程.以下以sublime为例,介绍怎么在mac的终端中加入app启动方法. 方法1 :使用"open -a /Applications/Sublime\ Tex ...