Comparação de versões de programa em PHP

image_pdfimage_print

Fazer a verificação de qual a maior versão de um determinado programa, pode ser uma tarefa chata.

Poucos conhecem a função nativa de PHP version_compare que faz este trabalho. No entanto, ela só compara corretamente versões que estejam no formato padrão esperado e utilizado pelo próprio PHP para se versionar.

Mas se este padrão é seguido, esta função será capaz de resolver muitos problemas de comparação de versões (qual maior, qual menor, etc) com muita simplicidade, como em:

if (version_compare(PHP_VERSION, '6.0.0') >= 0) {
    echo 'Estou com a versão PHP 6.0.0 ou superior, minha versão: ' . PHP_VERSION . "\n";
}

if (version_compare(PHP_VERSION, '5.3.0') >= 0) {
    echo 'Estou com a versão PHP 5.3.0 ou superior, minha versão: ' . PHP_VERSION . "\n";
}

if (version_compare(PHP_VERSION, '5.0.0', '>=')) {
    echo 'Estou com a versão PHP 5 ou superior, minha versão: ' . PHP_VERSION . "\n";
}

if (version_compare(PHP_VERSION, '5.0.0', '<')) {
    echo 'Estou com a versão PHP 4 ou superior, minha versão: ' . PHP_VERSION . "\n";
}

No entanto formatos que incompletos ou fora do padrão podem ter resultados equivocados com o uso da função nativa do PHP. Caso seja seu caso, utilize o código abaixo, que tenta na maioria dos casos solucionar este problema.

print(version_compare2('5.1', '5.1.0'));           //  0 => igual
print(version_compare2('5.1', '5.1.0.0'));         //  0 => igual
print(version_compare2('5.1.0', '5.1.0.0-alpha')); //  1 => 5.1.0.0-alpha é menor
print(version_compare2('5.1.0-beta', '5.1.0.0'));  // -1 => 5.1.0-beta é menor

function version_compare2($ver1, $ver2, $operator = null)
{
    $p = '#(\.0+)+($|-)#';
    $ver1 = preg_replace($p, '', $ver1);
    $ver2 = preg_replace($p, '', $ver2);
    return isset($operator) ? 
        version_compare($ver1, $ver2, $operator) : 
        version_compare($ver1, $ver2);
}
Gostou? Tire um minutinho e dê sua contribuição para Drall Dev Community no Patreon!