検索
ホームページ開発ツールcomposerComposer の自動ロードでカスタム ファイル サフィックスをサポートする方法

下面由composer使用教程栏目为大家介绍让Composer的autoload支持自定义文件后缀名的方法,希望对需要的朋友有所帮助!

Composer の自動ロードでカスタム ファイル サフィックスをサポートする方法

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 {

稍微修改一下:

Composer の自動ロードでカスタム ファイル サフィックスをサポートする方法

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 の自動ロードでカスタム ファイル サフィックスをサポートする方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明
この記事はaliyunで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。
作曲家の識別:重要な要素作曲家の識別:重要な要素Apr 27, 2025 am 12:27 AM

作曲家を識別するための重要な手順には、次のものがあります。1)ベートーベンのドラマやパワーなどの作曲家の文体的な特徴の分析。 2)バッハのバロック様式などの作曲家の歴史的背景と文化的影響を理解する。 3)単一の要素のみに依存することによって引き起こされる誤判断を避けるために、作業のメロディー、調和、リズム、構造を包括的に分析する。

作曲家:PHP開発におけるAIの未来作曲家:PHP開発におけるAIの未来Apr 26, 2025 am 12:10 AM

Composer'sfutureinphpdevelopments withaiincludes:1)ai-enhanced dependencymanagementforsuggestinglibraries、2)ai-drivencodegeneration forialeoredboilerplate、および3)

作曲家のスキルと資質:概要作曲家のスキルと資質:概要Apr 25, 2025 am 12:03 AM

成功した作曲家になるには、音楽理論、楽器のパフォーマンス、サウンドデザインなどのスキルや、キャプチャと絶え間ない仕事の修正への鋭いインスピレーションが必要です。作曲家はこれらのスキルと特性を使用して、感情と思考を音楽作品に変え、リスナーと共鳴します。

作曲家の資格:習熟度の評価作曲家の資格:習熟度の評価Apr 24, 2025 am 12:15 AM

作曲家の習熟度は、次の4つの側面で評価できます。1)パッケージ、依存関係、バージョン制御などの基本概念を理解する。 2)Composer.jsonの解析、依存関係の解決、パッケージのダウンロード、Autoloadファイルの生成を含むマスターコア関数。 3)ComposerInstall、更新、要求、およびダンプオートロードなど、基本的および高度なコマンドを使用するのに習熟しています。 4)Composer.Lockファイルの使用、AutoLOAD構成の最適化、定期的にキャッシュのクリーニングなどのベストプラクティスを適用します。

作曲家:自動タスクのAIを活用します作曲家:自動タスクのAIを活用しますApr 23, 2025 am 12:03 AM

Composerを使用してAIを組み合わせて自動タスクを実現します。 1。Composerは、構成ファイルを介して依存関係を管理し、AIはバージョンの選択を最適化できます。 2。実際のアプリケーションでは、AIを使用して、依存関係の管理、テスト、展開を自動化できます。 3.パフォーマンスの最適化には、依存関係の負荷とキャッシュ戦略が含まれます。 4.バージョンの競合やAIの誤判断などの問題に注意してください。これらの方法により、AIは仕事の効率と知性を改善できます。

AIの作曲家:コード提案と洞察AIの作曲家:コード提案と洞察Apr 22, 2025 am 12:05 AM

ComposerWithaiは、AIを使用してプログラミングエクスペリエンスを向上させるツールです。 1)コード構造、構文、パターンを分析することにより、リアルタイムの提案とバグ修正を提供します。 2)高度な機能には、コードのリファクタリング、パフォーマンスの最適化、セキュリティチェックが含まれます。 3)使用する場合、構成を調整し、フィードバックを提供し、他のツールを組み合わせて一般的な問題を解決できます。

作曲家:PHP依存関係マネージャーの紹介作曲家:PHP依存関係マネージャーの紹介Apr 21, 2025 am 12:02 AM

Composerは、PHPの依存関係管理ツールであり、プロジェクトに必要なライブラリとパッケージを管理するために使用されます。 1)composer.jsonファイルを介して依存関係を定義します。2)コマンドラインツールを使用してインストールと更新、3)依存関係管理プロセスを自動化し、開発効率を向上させ、4)依存関係を動的に追加するなどの高度な機能をサポートします。

作曲家の目的:依存関係を効率的に管理します作曲家の目的:依存関係を効率的に管理しますApr 20, 2025 am 12:04 AM

Composerは、PHPの依存関係管理ツールであり、Composer.jsonおよびComposer.Lockファイルを介してプロジェクトの依存関係を管理しています。 1. composer.jsonファイルを作成し、composerinstallインストール依存関係を実行します。 2。ComposerRequireを使用して、新しい依存関係を追加します。 3。クラスの自動読み込みを実装するように自動車を構成します。 4. ComposerDiagnoseを使用して、プロジェクトの健康状態を確認します。 5.依存関係管理の最適化:パッケージ名の更新を指定し、ComposerDump-Autoload-Oを使用してAutoloaderを最適化し、ComposerInStall-no-dを使用します

See all articles

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

Video Face Swap

Video Face Swap

完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

ホットツール

Dreamweaver Mac版

Dreamweaver Mac版

ビジュアル Web 開発ツール

SecLists

SecLists

SecLists は、セキュリティ テスターの究極の相棒です。これは、セキュリティ評価中に頻繁に使用されるさまざまな種類のリストを 1 か所にまとめたものです。 SecLists は、セキュリティ テスターが必要とする可能性のあるすべてのリストを便利に提供することで、セキュリティ テストをより効率的かつ生産的にするのに役立ちます。リストの種類には、ユーザー名、パスワード、URL、ファジング ペイロード、機密データ パターン、Web シェルなどが含まれます。テスターはこのリポジトリを新しいテスト マシンにプルするだけで、必要なあらゆる種類のリストにアクセスできるようになります。

mPDF

mPDF

mPDF は、UTF-8 でエンコードされた HTML から PDF ファイルを生成できる PHP ライブラリです。オリジナルの作者である Ian Back は、Web サイトから「オンザフライ」で PDF ファイルを出力し、さまざまな言語を処理するために mPDF を作成しました。 HTML2FPDF などのオリジナルのスクリプトよりも遅く、Unicode フォントを使用すると生成されるファイルが大きくなりますが、CSS スタイルなどをサポートし、多くの機能強化が施されています。 RTL (アラビア語とヘブライ語) や CJK (中国語、日本語、韓国語) を含むほぼすべての言語をサポートします。ネストされたブロックレベル要素 (P、DIV など) をサポートします。

SublimeText3 英語版

SublimeText3 英語版

推奨: Win バージョン、コードプロンプトをサポート!

VSCode Windows 64 ビットのダウンロード

VSCode Windows 64 ビットのダウンロード

Microsoft によって発売された無料で強力な IDE エディター