【php】 勾搭 Composer\Autoload\ClassLoader 类

来源:互联网 发布:如何用excel做数据库 编辑:程序博客网 时间:2024/05/22 20:38

      现在PHP使用composer进行管理包已经越来越平常了,我们也要跟上步伐,一起去学习一下composer是什么. 当然,要深入学习Composer 需要大家有对它一定的基础,不太熟悉的可以去官网瞧瞧.

      而对Composer管理器最基本的,就是它的自动加载类了,它支持Psr0和Psr4 两种加载类. 我们也不要在这里细究 Psr0和Psr4是什么. 

      对于spl_autoload_register 函数想必大家也有所接触了.这是在我们使用类的时候发现并没有被包含住,而会触发 已经注册 的 回掉函数来处理. 这个spl_autoload_register 就是用来注册 回掉函数的.



【类方法如下】

 @param array $classMap Class to filename map

# 类名 => 类文件  map 优先级 高 #

ClassLoader::addClassMap( array $classMap 

$autoload->addClassMap( array( "App\Test"=>"src/test.php"));

这样如果我需要 new App\Test();  的时候 他会去 include "src/test.php"; 然后 创建 App\Test对象成功

 @param string       $prefix  The prefix @param array|string $paths   The PSR-0 root directories @param bool         $prepend Whether to prepend the directories

# 如果 $prefix 为空时, 则是将 $paths类似于设置与 环境变量path(只是类似),添加了一个符合psr-0的类加载的路径数组 (公共)#

# 如果 $prefix不为空时,则当符合$prefix的类会在该指定的 paths下去寻找对应的文件 #

# $prepend 只是设置添加的path 是否在原有的path之前 #

ClassLoader::add( $prefix , $paths , $prepend  = false )

$autoload->add("Test_One","src/",false);$autoload->add("Test_One","src/app",true);
当我 new Test_One();的时候 会最先找 src/app/Test/One.php 文件 如果在该路径找不到 Test/One.php , 则会去 src/目录下去找Test/One.php文件。

注意: 

1.第二行我使用了 $prepend = true; 表示优先寻找src/app 路径.

2.同时 ".php"文件后缀也是可以通过$autoload进行设置的.

3.下滑线_被转换了 文件夹分隔符 "/" 这就是PSR-0的特点.


 @param string       $prefix  The prefix/namespace, with trailing '\\' @param array|string $paths   The PSR-0 base directories @param bool         $prepend Whether to prepend the directories
#  与 add方法 的参数 实际上是一致的 # 

ClassLoader::addPsr4( $prefix , $paths , $prepend  = false )

$autoload->addPsr4("App\\","src/app",false);$autoload->addPsr4("App\\","other/app",true);

当我 new App\Test(); 的时候,会去查找 other/app/Test.php 是否存在,如果不存在 则会寻找src/app/Test.php是否存在.


注意:

1. $prefix 会作为 namespace 注册进去, 这样 App\\Console\\Test 类 也可以在注册两个地址上去找地址.

2. $prefix 为空的话, 同样会注册paths变量.

3. $prefix 不能以\\ 开头,必须要有 \\ 结尾.

 @param string       $prefix The prefix @param array|string $paths  The PSR-0 base directories

# 与add() 方法的功能个一致,不过它会进行覆盖 原有的配置而非 添加 #

ClassLoader::set( $prefix , $paths)


* @param string       $prefix The prefix/namespace, with trailing '\\'* @param array|string $paths  The PSR-4 base directories
# 与addPsr4()方法类似 #
ClassLoader::setPrs4( $prefix , $paths)


# 是否使用服务器的path变量获取目标文件include 文件 #

bool  ClassLoader::$useIncludePath 

# 是否只使用classMap方式 include 自动加载类 #

bool  ClassLoader::$classMapAuthoritative

   

      终于,ClassLoader类的主要实用功能都已经介绍完了. 接下来看大家自己自由使用做一些测试了.

0 0