怎么让Composer的autoload支持自定义文件后缀名
发表于:2025-12-03 作者:千家信息网编辑
千家信息网最后更新 2025年12月03日,这篇文章主要介绍怎么让Composer的autoload支持自定义文件后缀名,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!PHP的Composer工具规范了我们对系统各种资源库
千家信息网最后更新 2025年12月03日怎么让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安全错误
数据库的锁怎样保障安全
嘉定区智能软件开发中心
在哪里可以进入2b2t的服务器
中国建设银行网络安全培训
淄博多轩社网络技术有限公司
魔域数据库表
工业互联网基础网络技术5g
堆存储数据库
一套输入法软件开发要多久
鹰潭正规服务器
服务器安全管控
网络安全学哪块
我的世界枪械服务器电脑版
网络安全法意义的正确表述
成功软件开发有限公司
服务器能放进pc机柜里么
亚控软件开发用什么语言
游戏端和服务器之间传输什么信息
mysql数据库删除主键
数据库主机名是什么
流量拦截软件开发
义乌网络安全应急
大连市网络安全平台
100T的服务器
es数据库分布式
江苏大学数据库复试大纲
一套输入法软件开发要多久
软件开发后台操作
工业模拟软件开发
网络安全黑板报素材视频
边缘计算服务器的投资