私は最新のプロジェクトでcomposerを使用しており、このように関数をマッピングしています
"require": {
...
},
"require-dev": {
...
},
"autoload": {
"psr-4": {
...
},
"files": [
"src/function/test-function.php"
]
}
フォルダー関数には、たとえばreal-function-1.php、real-function-2.phpなどのファイルがたくさんあると思います。つまり、composerフォルダー関数内のファイル?使用するのが面倒
"files": [
"src/function/real-function-1.php",
"src/function/real-function-2.php",
..,
"src/function/real-function-100.php",
]
私のような怠け者はいますか...
関数の名前空間を設定できない場合(大量のコードが破損するため、またはPSR-4を使用できないため)、関数を保持する静的クラスを作成したくない場合(自動ロードされる可能性があります) )、独自のグローバルインクルードファイルを作成し、composerに含めるように指示できます。
composer.json
{
"autoload": {
"files": [
"src/function/include.php"
]
}
}
include.php
$files = glob(__DIR__ . '/real-function-*.php');
if ($files === false) {
throw new RuntimeException("Failed to glob for function files");
}
foreach ($files as $file) {
require_once $file;
}
unset($file);
unset($files);
ファイル内の関数が使用されるかどうかに関係なく、要求ごとにすべてのファイルをロードするため、これは理想的ではありませんが、機能します。
注:インクルードファイルは、/ real-functionまたは同様のディレクトリの外に置いてください。または、それ自体も含まれ、再帰的な関数であることが判明し、最終的にメモリ例外がスローされます。
実際には、カスタムコードなしでこれを行うためのより良い方法があります。クラスを使用している場合は、 Composerのクラスマップ機能 を使用できます。関数を含む個々のファイルで作業している場合は、files[]
配列を使用する必要があります。
{
"autoload": {
"classmap": ["src/", "lib/", "Something.php"]
}
}