怎么让Composer的autoload支持自定义文件后缀名
发表于:2026-11-02 作者:千家信息网编辑
千家信息网最后更新 2026年11月02日,这篇文章主要介绍怎么让Composer的autoload支持自定义文件后缀名,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!PHP的Composer工具规范了我们对系统各种资源库
千家信息网最后更新 2026年11月02日怎么让Composer的autoload支持自定义文件后缀名
这篇文章主要介绍怎么让Composer的autoload支持自定义文件后缀名,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!
PHP的Composer工具规范了我们对系统各种资源库的加载格式,借助于PHP的自动加载机制,可以很大程度上简化在应用开发过程中的类库文件引用场景。但到目前为止,它有个不是问题的问题,就是文件后缀名只支持.php,而基于某些框架开发的旧资产,类文件的后缀名是.class.php,想使用Composer的自动加载规范,就不太纯粹了,一般要两者混着用,或者修改其他框架下的加载规则。
有没有省事点的解决办法呢?
首先只要能产生这么一个疑问,就赢了。而答案呢,多半能找到的。
Composer实现自动加载机制的代码非常简练,稍微看一下就能看懂。
当看到ClassLoader.php文件中的findFileWithExtension方法时参数里出现了一个$ext,也就看到希望。只要在适当的时机,能覆盖这个$ext参数就搞定。
其原始代码如下:
private function findFileWithExtension($class, $ext) { // PSR-4 lookup $logicalPathPsr4 = strtr($class, '\\', DIRECTORY_SEPARATOR) . $ext; $first = $class[0]; if (isset($this->prefixLengthsPsr4[$first])) { foreach ($this->prefixLengthsPsr4[$first] as $prefix => $length) { if (0 === strpos($class, $prefix)) { foreach ($this->prefixDirsPsr4[$prefix] as $dir) { if (file_exists($file = $dir . DIRECTORY_SEPARATOR . substr($logicalPathPsr4, $length))) { return $file; } } } } } // PSR-4 fallback dirs foreach ($this->fallbackDirsPsr4 as $dir) { if (file_exists($file = $dir . DIRECTORY_SEPARATOR . $logicalPathPsr4)) { return $file; } } // PSR-0 lookup if (false !== $pos = strrpos($class, '\\')) { // namespaced class name $logicalPathPsr0 = substr($logicalPathPsr4, 0, $pos + 1) . strtr(substr($logicalPathPsr4, $pos + 1), '_', DIRECTORY_SEPARATOR); } else {稍微修改一下:
autload_psr4.php 配置文件中,对应的格式变化:
return array( 'Qiniu\\' => array($vendorDir . '/qiniu/php-sdk/src/Qiniu'), // 字符串格式改为二维数组格式 'Liniu\\' => array([$vendorDir . '/Liniu/php-sdk/src/Liniu', '.class.php']),);
贴出代码:
private function findFileWithExtension($class, $ext) { // PSR-4 lookup $logicalPathPsr4 = strtr($class, '\\', DIRECTORY_SEPARATOR); $first = $class[0]; if (isset($this->prefixLengthsPsr4[$first])) { foreach ($this->prefixLengthsPsr4[$first] as $prefix => $length) { if (0 === strpos($class, $prefix)) { foreach ($this->prefixDirsPsr4[$prefix] as $dir) { $_ext = $ext; $_dir = $dir; if (is_array($dir) && count($dir) == 2) { $_ext = $dir[1]; $_dir = $dir[0]; } if (file_exists($file = $_dir . DIRECTORY_SEPARATOR . substr($logicalPathPsr4 . $_ext, $length))) { return $file; } } } } } // PSR-4 fallback dirs foreach ($this->fallbackDirsPsr4 as $dir) { if (file_exists($file = $dir . DIRECTORY_SEPARATOR . $logicalPathPsr4 . $ext)) { return $file; } } // PSR-0 lookup if (false !== $pos = strrpos($class, '\\')) { // namespaced class name $logicalPathPsr0 = substr($logicalPathPsr4 . $ext, 0, $pos + 1) . strtr(substr($logicalPathPsr4 . $ext, $pos + 1), '_', DIRECTORY_SEPARATOR); } else {编码,有一种纯粹的乐趣。
以上是"怎么让Composer的autoload支持自定义文件后缀名"这篇文章的所有内容,感谢各位的阅读!希望分享的内容对大家有帮助,更多相关知识,欢迎关注行业资讯频道!
文件
后缀
格式
支持
代码
内容
参数
机制
框架
篇文章
问题
开发
原始
很大
简练
适当
省事
乐趣
价值
兴趣
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
中关村互联网 科技集团
河南真二互联网科技有限公司
互联网与新科技
美国互联网黑科技
无线互联网科技
互联网科技美容
成都狮子座互联网科技
深圳前海聚择互联网科技有限公司
须眉科技是互联网公司吗
随着互联网科技发展
重庆威客帮互联网科技
佳云科技和互联网广告
互联网科技创新的路径
朱啸虎曾投资哪些互联网科技企业
互联网金融科技公司的优势
深圳互联网科技的发展
图游互联网科技
神州科技互联网有限公司
数字互联网科技有限公司
银川新华互联网科技学校招聘
金融科技 互联网金融
万易互联网科技
亿策互联网科技
时间互联网络科技
万达互联网科技
互联网科技公司做什么
深圳国际航运科技和互联网
贵州叶脉互联网科技有限公司所属行业
同城互联网络科技
美国五大互联网科技公司市值多少