【php】 勾搭 Composer\Autoload\ClassLoader 类

本文介绍了PHP的Composer管理器中的ClassLoader类,探讨了如何使用它进行Psr0和Psr4的类加载。文章提到,ClassLoader::addClassMap和ClassLoader::addPsr4等方法用于注册类路径,并解释了$prepend参数的作用。此外,还强调了自动加载中关于类名到文件映射、文件后缀和命名空间的处理。最后鼓励读者自行实践和测试。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

      现在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类的主要实用功能都已经介绍完了. 接下来看大家自己自由使用做一些测试了.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值