#1086·PHP-Parser

使用 Composer PHP 的必需版本

作者: BrianHenryIE创建于 2025年6月1日更新于 2025年10月8日

// Try to determine the Composer minimum PHP version. if (class_exists(InstalledVersions::class)) {

$rootPackage = InstalledVersions::getRootPackage();

// TODO: refactor to a real method
$getMinimumPhpVersionFromString = function(string $versionsString) use ($highestMinimumPhpVersion): string {
    if (0 < preg_match_all('/\d+(?:\.\d+)?(?:\.\d+)?/', $versionsString, $minimumPhpVersions)) {

        $minimumPhpVersion = array_reduce($minimumPhpVersions[0], function ($carry, $minimumPhpVersion) {
            return version_compare($minimumPhpVersion, $carry, '<')
                ? $minimumPhpVersion
                : $carry;
        }, $highestMinimumPhpVersion);
    } else {
        $minimumPhpVersion = $highestMinimumPhpVersion;
    }
    return $minimumPhpVersion;
};

/**
 * "config": {
 *   "platform": {
 *     "php": "7.3.0"
 *   }
 * }
 */
if (isset($rootPackage['config'], $rootPackage['config']['platform'], $rootPackage['config']['platform']['php'])) {
    $minimumPhpVersion = $rootPackage['config']['platform']['php'];
} elseif (isset($rootPackage['require'], $rootPackage['require']['php'])) {
    /**
     * {
     *   "require": {
     *     "php": ">=7.4"
     *   }
     * }
     */
    $minimumPhpVersion = $getMinimumPhpVersionFromString($rootPackage['require']['php']);
} else {
    // Scan all required packages for their minimum PHP version.
    $reflectionClass = new \ReflectionClass(InstalledVersions::class);
    $installedVersionsPath = $reflectionClass->getFileName();

    $minimumPhpVersionsString = '';

    $installedJsonPath = \dirname($installedVersionsPath) . '/installed.json';
    if (\file_exists($installedJsonPath)) {
        $installedJson = \json_decode(file_get_contents($installedJsonPath), true);
        if (isset($installedJson['packages'])) {
            foreach ($installedJson['packages'] as $package) {
                if (isset($package['require'], $package['require']['php'])) {
                    $minimumPhpVersionsString .= $package['require']['php'];
                }
            }
        }
    }

    $minimumPhpVersion = $getMinimumPhpVersionFromString($minimumPhpVersionsString);
}

}

内容来源: nikic/PHP-Parser