Webエンジニア向けプログラミング解説動画をYouTubeで配信中!
▶ チャンネル登録はこちら

【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でバージョン文字列を比較する

1<?php
2
3/**
4 * PHPのバージョン文字列を比較する`version_compare`関数の使用例。
5 *
6 * この関数は、主にソフトウェアのバージョン互換性をチェックする際に役立ちます。
7 *
8 * @param string $v1 比較する最初のバージョン文字列
9 * @param string $v2 比較する2番目のバージョン文字列
10 * @return void
11 */
12function demonstrateVersionComparison(string $v1, string $v2): void
13{
14    echo "--- 比較するバージョン: {$v1}{$v2} ---\n";
15
16    // version_compare() に引数が2つの場合:
17    // バージョンの順序を示す整数を返します。
18    // -1: $v1 が $v2 より古い
19    //  0: $v1 と $v2 が同じ
20    //  1: $v1 が $v2 より新しい
21    $result = version_compare($v1, $v2);
22    echo "version_compare('{$v1}', '{$v2}') (引数2つの場合): ";
23    if ($result === -1) {
24        echo "'{$v1}' は '{$v2}' より古いです。\n";
25    } elseif ($result === 0) {
26        echo "'{$v1}' と '{$v2}' は同じバージョンです。\n";
27    } else { // $result === 1
28        echo "'{$v1}' は '{$v2}' より新しいです。\n";
29    }
30
31    echo "\n";
32
33    // version_compare() に引数が3つの場合 (演算子を指定):
34    // 指定された演算子に基づいて真偽値(bool)を返します。
35    // 主な演算子: < (lt), <= (le), > (gt), >= (ge), == (eq), != (ne), <> (ne)
36
37    echo "version_compare('{$v1}', '{$v2}', '<')  : " . (version_compare($v1, $v2, '<') ? 'true' : 'false') . " ('{$v1}' < '{$v2}' ?)\n";
38    echo "version_compare('{$v1}', '{$v2}', '<=') : " . (version_compare($v1, $v2, '<=') ? 'true' : 'false') . " ('{$v1}' <= '{$v2}' ?)\n";
39    echo "version_compare('{$v1}', '{$v2}', '>')  : " . (version_compare($v1, $v2, '>') ? 'true' : 'false') . " ('{$v1}' > '{$v2}' ?)\n";
40    echo "version_compare('{$v1}', '{$v2}', '>=') : " . (version_compare($v1, $v2, '>=') ? 'true' : 'false') . " ('{$v1}' >= '{$v2}' ?)\n";
41    echo "version_compare('{$v1}', '{$v2}', '==') : " . (version_compare($v1, $v2, '==') ? 'true' : 'false') . " ('{$v1}' == '{$v2}' ?)\n";
42    echo "version_compare('{$v1}', '{$v2}', '!=') : " . (version_compare($v1, $v2, '!=') ? 'true' : 'false') . " ('{$v1}' != '{$v2}' ?)\n";
43    echo "\n";
44}
45
46// さまざまなバージョン文字列の比較例を実行します。
47demonstrateVersionComparison('1.0', '1.1');
48demonstrateVersionComparison('2.0.1', '2.0.0');
49demonstrateVersionComparison('3.0.0', '3.0.0');
50demonstrateVersionComparison('7.4.3', '8.0.0');
51demonstrateVersionComparison('8.0.0beta', '8.0.0RC1'); // 開発バージョン文字列も正しく比較されます
52demonstrateVersionComparison('1.0.0-alpha', '1.0.0-beta'); // プレリリース識別子の比較例

PHPのversion_compare関数は、二つのバージョン文字列を正確に比較するための機能を提供します。この関数は、主にソフトウェアやシステムのバージョン互換性を確認する際に非常に役立ちます。

この関数は、比較したいバージョン文字列を$version1$version2として受け取ります。

もし引数を二つだけ指定した場合、戻り値は整数となります。$version1$version2より古い場合は-1、同じバージョンの場合は0、新しい場合は1が返されるため、どちらのバージョンが新しいか古いかを数値で簡単に判別できます。

一方、オプションの第三引数$operator<(より小さい)、<=(以下)、>(より大きい)、>=(以上)、==(等しい)、!=(等しくない)といった演算子を指定すると、戻り値は真偽値(trueまたはfalse)となります。例えば、version_compare('1.0', '1.1', '<')のように記述すると、「1.0は1.1より小さい」という比較が評価され、trueが返されます。

version_compare関数は、8.0.0beta1.0.0-alphaのような開発版やプレリリース版を示す文字列も適切に比較できるため、幅広いバージョンの比較に対応可能です。

version_compare関数は、主にソフトウェアのバージョン互換性をチェックする際に役立ちます。この関数を使う上で特に注意すべき点は、引数の数によって戻り値の型が変わることです。

引数を2つ指定した場合、バージョン間の順序を示す整数(-1: $v1が古い, 0: 同じ, 1: $v1が新しい)が返されます。一方、3つ目の引数に演算子(例: <>===など)を指定すると、比較結果が真か偽かを示す真偽値(bool)が返されます。この戻り値の型を正しく理解し、意図する比較方法に応じて引数を使い分けることが重要です。また、betaRCのようなプレリリース識別子を含むバージョン文字列も適切に比較できるため、開発中のバージョン管理にも柔軟に対応できます。

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

1<?php
2
3/**
4 * version_compare() 関数の使用例を示します。
5 * この関数は、2つのバージョン文字列を比較し、その関係に応じて整数または真偽値を返します。
6 * システムエンジニアを目指す初心者が、バージョンチェックの基本的なロジックを理解するのに役立ちます。
7 */
8
9echo "--- オペレーターなしの比較 (数値としての結果) ---\n";
10// オペレーターを省略すると、バージョン1がバージョン2よりも
11// 小さい場合は -1、等しい場合は 0、大きい場合は 1 を返します。
12
13$version1_0 = '1.0';
14$version1_1 = '1.1';
15$version2_0 = '2.0';
16
17// 1.0 vs 1.1: 1.0 < 1.1 なので -1
18$result_less = version_compare($version1_0, $version1_1);
19echo "{$version1_0}{$version1_1} の比較: {$result_less} (1.0 < 1.1)\n";
20
21// 1.0 vs 1.0: 1.0 == 1.0 なので 0
22$result_equal = version_compare($version1_0, $version1_0);
23echo "{$version1_0}{$version1_0} の比較: {$result_equal} (1.0 == 1.0)\n";
24
25// 2.0 vs 1.1: 2.0 > 1.1 なので 1
26$result_greater = version_compare($version2_0, $version1_1);
27echo "{$version2_0}{$version1_1} の比較: {$result_greater} (2.0 > 1.1)\n";
28
29// PHPのバージョンにはプレリリース識別子が含まれることもあります
30// 'dev', 'alpha', 'beta', 'RC' などは正式リリースよりも古いと判断されます
31$result_pre_release = version_compare('5.3.0-dev', '5.3.0');
32echo "5.3.0-dev と 5.3.0 の比較: {$result_pre_release} (開発版は正式版より古い -1)\n";
33
34echo "\n--- オペレーターありの比較 (真偽値としての結果) ---\n";
35// オペレーターを指定すると、比較結果が真であれば true、偽であれば false を返します。
36// 使用可能なオペレーター: <, lt, <=, le, >, gt, >=, ge, ==, =, !=, <>
37
38$current_app_version = '1.5.2';
39$latest_app_version = '1.6.0';
40
41// 最新バージョンより小さいか?
42$is_older = version_compare($current_app_version, $latest_app_version, '<');
43echo "{$current_app_version}{$latest_app_version} より小さいか ('<'): " . ($is_older ? 'true' : 'false') . "\n";
44
45// 最新バージョン以上か?
46$is_up_to_date = version_compare($current_app_version, $latest_app_version, '>=');
47echo "{$current_app_version}{$latest_app_version} 以上か ('>='): " . ($is_up_to_date ? 'true' : 'false') . "\n";
48
49// 最新バージョンと等しいか?
50$is_exactly_latest = version_compare($current_app_version, '1.5.2', '==');
51echo "{$current_app_version} が 1.5.2 と等しいか ('=='): " . ($is_exactly_latest ? 'true' : 'false') . "\n";
52
53echo "\n--- 現在のPHPバージョンとの比較例 (一般的なユースケース) ---\n";
54// アプリケーションが動作するために必要なPHPバージョンをチェックするシナリオ
55
56$minimum_php_version = '8.0.0';
57$running_php_version = PHP_VERSION; // 現在実行中のPHPのバージョンを取得
58
59echo "現在実行中のPHPバージョン: {$running_php_version}\n";
60echo "アプリケーションに必要な最低PHPバージョン: {$minimum_php_version}\n";
61
62if (version_compare($running_php_version, $minimum_php_version, '>=')) {
63    echo "✅ 現在のPHPバージョンは {$minimum_php_version} 以上です。アプリケーションを実行できます。\n";
64} else {
65    echo "❌ 警告: 現在のPHPバージョンは {$minimum_php_version} 未満です。アプリケーションが正しく動作しない可能性があります。\n";
66}
67
68?>

PHPのversion_compare関数は、二つのバージョン文字列を正確に比較するために使用されます。この関数は、第一引数 $version1 と第二引数 $version2 に比較したいバージョン文字列を受け取ります。

第三引数 $operator を省略した場合、version_compareはバージョン1とバージョン2の関係を示す整数値を返します。具体的には、バージョン1がバージョン2より小さい場合は -1、等しい場合は 0、大きい場合は 1 を返します。この際、「5.3.0-dev」のようなプレリリース識別子を含むバージョンも適切に比較され、開発版は正式リリース版より古いと判断されます。

一方、第三引数 $operator に比較演算子(例: '<', '>=', '=='など)を指定すると、比較結果が真であれば true、偽であれば false を真偽値で返します。これにより、「現在のシステムが特定のPHPバージョン以上であるか」といった条件を直接判定することが可能になります。

この関数は、アプリケーションが動作するために必要なPHPの最低バージョンを満たしているかを確認したり、ソフトウェアのアップデートが必要かどうかを判断したりするなど、システム開発におけるバージョン管理の多くの場面で活用されます。

version_compare関数は、2つのバージョン文字列を比較する際に非常に便利です。最も重要な注意点は、第三引数$operatorの有無によって戻り値の型が変わる点です。$operatorを省略すると、バージョン1がバージョン2よりも小さい・等しい・大きいに応じて-1、0、1の整数が返されます。一方、$operator(例: '>', '<=', '==')を指定すると、比較結果が真であればtrue、偽であればfalseの真偽値が返されます。この違いを理解しないと、意図しない挙動やエラーにつながる可能性があります。また、バージョン文字列には'alpha'や'beta'といったプレリリース識別子も正しく解釈され、正式版よりも古いと判断されます。この関数は、アプリケーションが必要とする最低PHPバージョンが満たされているかを確認する際など、システム要件のチェックに広く利用されます。

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)で返され、より詳細な比較結果が得られます。この違いを理解し、システム要件の確認やソフトウェアのアップデート判定など、目的に応じて使い分けてください。バージョン文字列は、正確な比較のためにも標準的な形式で指定しましょう。

関連コンテンツ

関連プログラミング言語