public static function getMissingRequirements($className, $methodName)
{
$required = static::getRequirements($className, $methodName);
$missing = [];
$operator = empty($required['PHP']['operator']) ? '>=' : $required['PHP']['operator'];
if (!empty($required['PHP']) && !version_compare(PHP_VERSION, $required['PHP']['version'], $operator)) {
$missing[] = sprintf('PHP %s %s is required.', $operator, $required['PHP']['version']);
}
if (!empty($required['PHPUnit'])) {
$phpunitVersion = PHPUnit_Runner_Version::id();
$operator = empty($required['PHPUnit']['operator']) ? '>=' : $required['PHPUnit']['operator'];
if (!version_compare($phpunitVersion, $required['PHPUnit']['version'], $operator)) {
$missing[] = sprintf('PHPUnit %s %s is required.', $operator, $required['PHPUnit']['version']);
}
}
if (!empty($required['OS']) && !preg_match($required['OS'], PHP_OS)) {
$missing[] = sprintf('Operating system matching %s is required.', $required['OS']);
}
if (!empty($required['functions'])) {
foreach ($required['functions'] as $function) {
$pieces = explode('::', $function);
if (2 === count($pieces) && method_exists($pieces[0], $pieces[1])) {
continue;
}
if (function_exists($function)) {
continue;
}
$missing[] = sprintf('Function %s is required.', $function);
}
}
if (!empty($required['extensions'])) {
foreach ($required['extensions'] as $extension) {
if (isset($required['extension_versions'][$extension])) {
continue;
}
if (!extension_loaded($extension)) {
$missing[] = sprintf('Extension %s is required.', $extension);
}
}
}
if (!empty($required['extension_versions'])) {
foreach ($required['extension_versions'] as $extension => $required) {
$actualVersion = phpversion($extension);
$operator = empty($required['operator']) ? '>=' : $required['operator'];
if (false === $actualVersion || !version_compare($actualVersion, $required['version'], $operator)) {
$missing[] = sprintf('Extension %s %s %s is required.', $extension, $operator, $required['version']);
}
}
}
return $missing;
}