搜索
首页开发工具composer如何让Composer的autoload支持自定义文件后缀名

下面由composer使用教程栏目为大家介绍让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 {

稍微修改一下:

83e4a47f0da9455fada6f505c747d2f.png

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支持自定义文件后缀名的详细内容。更多信息请关注PHP中文网其他相关文章!

声明
本文转载于:aliyun。如有侵权,请联系admin@php.cn删除
使用 Composer 解决 Yii2 框架中的图片上传问题使用 Composer 解决 Yii2 框架中的图片上传问题Apr 18, 2025 am 10:27 AM

在开发基于Yii2框架的应用程序时,我遇到了一个常见但棘手的问题:如何高效地处理图片上传。用户常常需要上传各种格式和大小的图片,而我需要确保这些图片能被正确地处理和存储。尝试了多种方法后,我发现sergks/yii2-image-behavior这个扩展库能够完美地解决这个问题。

使用 Composer 简化 SkeekS CMS 项目部署:我的实际经验使用 Composer 简化 SkeekS CMS 项目部署:我的实际经验Apr 18, 2025 am 10:24 AM

在最近的一次项目中,我需要快速部署一个基于SkeekSCMS的网站。由于时间紧迫,我必须找到一个高效的方法来完成这一任务。在尝试了几种不同的方法后,我发现使用Composer不仅简化了整个过程,还极大地提高了部署的效率。可以通过一下地址学习composer:学习地址

使用 Composer 解决 Magento 2 自定义横幅管理:Magepotato/module-banners 库的实践应用使用 Composer 解决 Magento 2 自定义横幅管理:Magepotato/module-banners 库的实践应用Apr 18, 2025 am 10:21 AM

在最近的一个Magento2项目中,我遇到了一个挑战:需要在电商平台上灵活地管理和展示横幅广告。传统的横幅管理方式效率低下,且无法满足我们对REST和GraphQLAPI支持的需求。为了解决这个问题,我开始寻找一种高效且易于集成的解决方案,最终找到了Magepotato/module-banners这个库,它不仅解决了我的问题,还带来了意想不到的便利。

使用 Composer 简化短信发送:jakharbek/yii2-sms 库的实际应用使用 Composer 简化短信发送:jakharbek/yii2-sms 库的实际应用Apr 18, 2025 am 10:18 AM

在开发一个需要频繁发送短信的Yii2项目时,我遇到了一个挑战:如何高效地管理不同的短信服务提供商(SMSproviders)并确保发送过程的可靠性和可扩展性。我尝试了多种解决方案,但都无法满足我的需求,直到我发现了jakharbek/yii2-sms这个库。它不仅解决了我的问题,还为项目带来了极大的便利。

如何使用 Composer 解决 Docker API 版本问题如何使用 Composer 解决 Docker API 版本问题Apr 18, 2025 am 10:15 AM

在开发一个与Docker集成的PHP项目时,我遇到了一个棘手的问题:由于DockerAPI的版本更新,我的项目出现了兼容性问题。最初使用的DockerAPI版本是1.35,但Docker升级到了1.39,我的项目无法正常运行。我尝试了多种方法来解决这个问题,最终通过Composer找到了一个有效的解决方案。

使用 Composer 解决 PHP 开发中的常见问题:MOC Uteis 库的实用指南使用 Composer 解决 PHP 开发中的常见问题:MOC Uteis 库的实用指南Apr 18, 2025 am 10:12 AM

在开发PHP项目时,我们经常会遇到一些重复的任务和复杂的流程,这些问题不仅耗费时间,还会影响开发效率。最近,我在开发一个项目时遇到了这样的困扰:需要频繁处理一些常见的开发任务,如字符串操作、日期处理等。虽然我尝试了多种方法,但始终感觉不够高效和简便。幸运的是,我发现了MOCUteis这个库,它不仅简化了开发流程,还大大提升了我的工作效率。

如何利用 Composer 简化 Laravel API 开发:以 code4mk/kapi 为例如何利用 Composer 简化 Laravel API 开发:以 code4mk/kapi 为例Apr 18, 2025 am 10:09 AM

在开发LaravelAPI时,常会遇到权限管理、OAuth认证等复杂问题。我曾在一个项目中面临这样的挑战:需要快速搭建一个安全且易用的API系统。经过一番探索,我发现了code4mk/kapi这个库,它利用Composer轻松解决了我的问题。可以通过以下地址学习Composer:学习地址

如何利用 Composer 实现 AdSense 数据的实时推送至 La Metric 设备如何利用 Composer 实现 AdSense 数据的实时推送至 La Metric 设备Apr 18, 2025 am 10:06 AM

在项目开发过程中,我们经常需要将数据实时推送至智能设备,以提供用户更好的体验。最近,我在尝试将GoogleAdSense的数据实时推送至LaMetric设备时,遇到了诸多挑战。传统的实现方式复杂且难以维护,直到我发现了dejurin/lametric-adsense这个库,通过Composer轻松解决了这个问题。

See all articles

热AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover

AI Clothes Remover

用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool

Undress AI Tool

免费脱衣服图片

Clothoff.io

Clothoff.io

AI脱衣机

AI Hentai Generator

AI Hentai Generator

免费生成ai无尽的。

热门文章

R.E.P.O.能量晶体解释及其做什么(黄色晶体)
1 个月前By尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.最佳图形设置
1 个月前By尊渡假赌尊渡假赌尊渡假赌
威尔R.E.P.O.有交叉游戏吗?
1 个月前By尊渡假赌尊渡假赌尊渡假赌

热工具

MinGW - 适用于 Windows 的极简 GNU

MinGW - 适用于 Windows 的极简 GNU

这个项目正在迁移到osdn.net/projects/mingw的过程中,你可以继续在那里关注我们。MinGW:GNU编译器集合(GCC)的本地Windows移植版本,可自由分发的导入库和用于构建本地Windows应用程序的头文件;包括对MSVC运行时的扩展,以支持C99功能。MinGW的所有软件都可以在64位Windows平台上运行。

SublimeText3 英文版

SublimeText3 英文版

推荐:为Win版本,支持代码提示!

SublimeText3汉化版

SublimeText3汉化版

中文版,非常好用

适用于 Eclipse 的 SAP NetWeaver 服务器适配器

适用于 Eclipse 的 SAP NetWeaver 服务器适配器

将Eclipse与SAP NetWeaver应用服务器集成。

PhpStorm Mac 版本

PhpStorm Mac 版本

最新(2018.2.1 )专业的PHP集成开发工具