Сегодня в конце стрима я написал в тикете Infection, почему мутация функций очень полезна. Один из мейнтейнеров поставил под вопрос возможность подмены оригинальных файлов из секции
autoload.files на мутированные. Ну а поскольку я обожаю такие вызовы, я пошёл смотреть if (empty($GLOBALS['__composer_autoload_files'][$fileIdentifier])) {
$GLOBALS['__composer_autoload_files'][$fileIdentifier] = true;
require $file;
}И придумал следующую лазейку:
function disableAutoloadFile(string $vendorDir, string $file): void
{
/** @var array<non-empty-string, non-empty-string> */
$idToFileMap = require $vendorDir . '/composer/autoload_files.php';
$id = array_search(realpath($file), $idToFileMap);
if ($id === false) {
throw new LogicException("File `{$file}` is not registered in autoload.files");
}
if (isset($GLOBALS['__composer_autoload_files'][$id])) {
throw new LogicException("File `{$file}` is already loaded");
}
$GLOBALS['__composer_autoload_files'][$id] = true;
}
disableAutoloadFile(__DIR__ . '/vendor', __DIR__ . '/src/functions.php');
require_once $infectionTmp . '/functions_mutated.php';
require_once __DIR__ . '/vendor/autoload.php';
Да, грязновато, но, похоже, это единственный способ добавить мутацию функций в Infection...
Готовы вместе со мной поработать в Цеху в эти выходные?! Ставьте 💯, если да!