したがって、現在の私の目標は、ユーザーの PHP バージョンを検出し (問題ではありません)、それに基づいて if else を実行することです。
したがって、次のように書くと:
if (PHP => 5.3){
// call a function anonymously
}
else {
// if user does not have 5.3, this else block disables the feature.
}
私が抱えている問題は、ユーザーが 5.3 以降 (PHP 5.3 で導入されたため) を使用している場合は PHP の匿名関数を使用し、古いバージョンを使用している場合は別の関数を使用したいということです。問題は、もちろん、ユーザーがたとえば PHP 5.2.17 を使用している場合、その if ステートメントが true として評価されることはありませんが、無名関数呼び出しは PHP にとって構文エラーのように見えるため、構文に対して致命的なエラーがスローされることです。 5.2.17
上記のようなことをする方法はありますか?私が見つけた唯一の回避策は、if にあるものを新しいファイルに入れ、else にあるものを別のファイルに入れ、次のようにすることです。
$version = '5.2';//user's current version cut to the nearest x.y, ex 5.3, 5.4, 5.5
// Remove the period here, so we have 5.2
require 'function'.$version.'.php';
function53.php は 5.2 ユーザーにはロードされないため、これで問題なく動作します。ただし、個別のファイルを使用する必要があるのは理想的ではありません。
アレスの質問へのコメントを読んだ後、次のようになります。
if ($version > '5.3'){
// require one file
}
else{
// require another
}
動作しないでしょう。PHPのコンパイラは、コンパイル時に両方のファイルを実行して、実行前に構文エラーをチェックし、回避しようとしているエラーをスローします。ファイル メソッドが機能する唯一の方法は、バージョン番号に基づいてファイルを動的に選択することです。これには、PHP 4 および 5 からの xy リリースごとに個別のファイルが必要です。理想的ではありません。
アレックスの答えでは、うまくいきます。提案された大量のファイルに対して、1 行の eval (無名関数呼び出しを非表示にするために必要) について話しているのです。