【PHP8.x】version_compare関数の使い方

version_compare関数の使い方について、初心者にもわかりやすく解説します。

作成日: 更新日:

基本的な使い方

version_compare関数は、2つのバージョン文字列を比較し、その結果を示す数値を返したり、特定の比較演算子に基づいて真偽値を返したりする関数です。この関数は、ソフトウェアのバージョンが特定の条件を満たすかどうかをプログラムで判断したい場合に非常に有効です。

この関数には、比較したい最初のバージョン文字列を渡す$version1引数と、比較したい2番目のバージョン文字列を渡す$version2引数があります。さらに、オプションとして$operator引数を指定することもできます。

$operator引数を省略した場合、関数は整数を返します。具体的には、$version1$version2よりも小さい場合は-1、両者が等しい場合は0$version1$version2よりも大きい場合は1が返されます。これにより、比較結果に応じて柔軟な処理を行うことが可能です。

一方、$operator引数に'<', 'lt', '>', 'gt', '==', 'eq', '!=', 'ne'などの比較演算子文字列を指定した場合、version_compare関数はその比較結果が真であればtrue、偽であればfalseという真偽値を返します。これにより、コード内で直接条件分岐(if文など)に組み込むことができ、より簡潔な記述が可能です。

この関数の特徴は、単なる数値や文字列の比較にとどまらず、「1.0.11」と「1.0.9」のようなドット区切りのバージョン番号だけでなく、「1.0.0-RC1」や「1.0.0beta」といったプレリリース版の表記も適切に解釈して比較できる点です。例えば、特定のPHPの機能があるバージョン以降でしか利用できない場合に、現在のPHPのバージョンをチェックし、互換性を確保するための処理を実装する際に役立ちます。システム開発において、動作環境のバージョン管理や機能の互換性チェックは重要な要素であり、この関数の適切な利用は安定したシステム構築に貢献します。

構文(syntax)

1<?php
2$compare_result = version_compare('1.0.0', '1.0.1');
3$is_version_met = version_compare(PHP_VERSION, '8.0.0', '>=');
4?>

引数(parameters)

string $version1, string $version2, ?string $operator = null

  • string $version1: 比較対象のバージョン1を指定する文字列
  • string $version2: 比較対象のバージョン2を指定する文字列
  • ?string $operator = null: 比較演算子を指定する文字列。省略可能で、省略時はバージョン1がバージョン2より大きいか、等しいか、小さいかを比較する

戻り値(return)

int|bool

指定されたPHPのversion_compare関数は、2つのバージョン文字列を比較した結果を返します。バージョン1がバージョン2より大きい場合は1、等しい場合は0、小さい場合は-1の整数を返します。ただし、バージョン文字列のフォーマットが無効な場合はfalseを返します。

サンプルコード

PHP version_compareでバージョン比較する

1<?php
2
3/**
4 * PHPのバージョン比較関数 `version_compare` の使い方をデモンストレーションします。
5 * システム要件の確認や、ソフトウェアのアップデート有無の判定などに応用できます。
6 */
7function demonstrateVersionComparison(): void
8{
9    // 現在のソフトウェアバージョンを想定
10    $currentSoftwareVersion = '8.1.5';
11    // 比較対象となる要件バージョンまたは最新バージョンを想定
12    $requiredMinimumVersion = '8.0.0';
13    $latestStableVersion = '8.2.10';
14    $specificTargetVersion = '8.1.5';
15
16    echo "--- バージョン比較のデモンストレーション ---\n";
17    echo "現在のバージョン: " . $currentSoftwareVersion . "\n";
18    echo "要求される最低バージョン: " . $requiredMinimumVersion . "\n";
19    echo "最新安定バージョン: " . $latestStableVersion . "\n";
20    echo "特定のターゲットバージョン: " . $specificTargetVersion . "\n\n";
21
22    // 1. オペレータを指定して真偽値 (bool) で比較する (一般的な使い方)
23
24    // 現在のバージョンが必要最低バージョン以上か確認
25    // '>=' 演算子を使用し、真偽値 (true/false) を返します。
26    if (version_compare($currentSoftwareVersion, $requiredMinimumVersion, '>=')) {
27        echo "✅ ({$currentSoftwareVersion}) は、要求される最低バージョン ({$requiredMinimumVersion}) 以上です。\n";
28    } else {
29        echo "❌ ({$currentSoftwareVersion}) は、要求される最低バージョン ({$requiredMinimumVersion}) 未満です。\n";
30    }
31
32    // 最新バージョンにアップデートが必要か確認 (現在のバージョンが最新より古いか)
33    // '<' 演算子を使用し、真偽値 (true/false) を返します。
34    if (version_compare($currentSoftwareVersion, $latestStableVersion, '<')) {
35        echo "⚠️ ({$currentSoftwareVersion}) は、最新安定バージョン ({$latestStableVersion}) より古いため、アップデートを推奨します。\n";
36    } else {
37        echo "✅ ({$currentSoftwareVersion}) は、最新安定バージョン ({$latestStableVersion}) と同等か、それ以上です。\n";
38    }
39
40    // 特定のバージョンと完全に一致するか確認
41    // '==' 演算子を使用し、真偽値 (true/false) を返します。
42    if (version_compare($currentSoftwareVersion, $specificTargetVersion, '==')) {
43        echo "✅ ({$currentSoftwareVersion}) は、特定のターゲットバージョン ({$specificTargetVersion}) と完全に一致します。\n";
44    } else {
45        echo "❌ ({$currentSoftwareVersion}) は、特定のターゲットバージョン ({$specificTargetVersion}) と一致しません。\n";
46    }
47
48    echo "\n";
49
50    // 2. オペレータを指定せずに整数値 (int) で比較する (より詳細な比較が必要な場合)
51    // 戻り値:
52    //   -1: version1 が version2 より小さい
53    //    0: version1 と version2 が等しい
54    //    1: version1 が version2 より大きい
55
56    $comparisonResultAgainstLatest = version_compare($currentSoftwareVersion, $latestStableVersion);
57    echo "{$currentSoftwareVersion}{$latestStableVersion} の比較結果 (整数値): {$comparisonResultAgainstLatest}\n";
58
59    if ($comparisonResultAgainstLatest < 0) {
60        echo "   -> 結果は -1: {$currentSoftwareVersion}{$latestStableVersion} より古いです。\n";
61    } elseif ($comparisonResultAgainstLatest === 0) {
62        echo "   -> 結果は 0: {$currentSoftwareVersion}{$latestStableVersion} は同じです。\n";
63    } else { // $comparisonResultAgainstLatest > 0
64        echo "   -> 結果は 1: {$currentSoftwareVersion}{$latestStableVersion} より新しいです。\n";
65    }
66
67    $comparisonResultAgainstSpecific = version_compare($currentSoftwareVersion, $specificTargetVersion);
68    echo "{$currentSoftwareVersion}{$specificTargetVersion} の比較結果 (整数値): {$comparisonResultAgainstSpecific}\n";
69    if ($comparisonResultAgainstSpecific === 0) {
70        echo "   -> 結果は 0: {$currentSoftwareVersion}{$specificTargetVersion} は同じです。\n";
71    }
72
73    echo "\n--- デモンストレーション終了 ---\n";
74}
75
76// 関数を実行してバージョン比較の例を表示します
77demonstrateVersionComparison();
78
79?>

PHPのversion_compare関数は、二つのバージョン文字列を正確に比較するために使用されます。システムの要件確認や、ソフトウェアのバージョンアップが必要かどうかの判定など、バージョン管理が重要な場面で非常に役立ちます。

この関数は、比較したいバージョン文字列を$version1$version2として受け取ります。さらに、オプションで$operator引数に'==', '>', '<', '>='といった比較演算子を指定できます。

$operatorを指定した場合、比較結果が真であればtrue、偽であればfalseという真偽値(bool)が戻り値となります。これにより、「現在のバージョンが特定のバージョン以上か」といった条件を直接判定できます。

一方、$operatorを省略した場合、$version1$version2より小さい場合は-1、等しい場合は0、大きい場合は1という整数値(int)が戻り値として返されます。この整数値を利用することで、より詳細なバージョンの大小関係に基づいて処理を分岐させることが可能です。

サンプルコードでは、現在のソフトウェアバージョンを例にとり、要求される最低バージョン、最新安定バージョンなどと比較する具体的な利用例を示しています。オペレータを指定してtrue/falseで比較する方法と、オペレータを省略して整数値でより詳細な比較を行う方法の両方が示されており、この関数の柔軟な使い方を学ぶことができます。

version_compare関数は、第三引数のオペレータ指定の有無で戻り値の型が変わるため注意が必要です。オペレータを指定すると、比較が真偽値(bool)で返されるため、条件分岐に直接利用できます。一方、オペレータを省略すると、バージョン1が小さい場合に-1、同じ場合に0、大きい場合に1の整数値(int)で返され、より詳細な比較結果が得られます。この違いを理解し、システム要件の確認やソフトウェアのアップデート判定など、目的に応じて使い分けてください。バージョン文字列は、正確な比較のためにも標準的な形式で指定しましょう。

関連コンテンツ

関連プログラミング言語