私はPHP関数を書いています。私は次のことができるようにしたい。現在のバージョンのPHPの将来のバージョンの機能を使用する関数の書き方は?
スプラット演算子(...
)が(5.6+ =すなわちPHPバージョン)が利用可能であるならば、私はfunc_num_args()
とfunc_get_args()
を使用して、同じ機能を定義したい他に、そのを使用して関数を定義します。
」:
if (!defined('PHP_VERSION_ID')) {
$version = explode('.', PHP_VERSION);
define('PHP_VERSION_ID', ($version[0] * 10000 + $version[1] * 100 + $version[2]));
}
function _insert_keywords_helper($text, $keywords_array) {
$text_words_array = explode(" ", $text);
$idx = 1;
foreach ($keywords_array as $keyword) {
array_splice($text_words_array, $idx * 50, 0, $keyword);
}
return implode(" ", $text_words_array);
}
if (PHP_VERSION_ID < 56000) {
// ... splat operator is not available
function insert_keywords() {
$numargs = func_num_args();
if ($numargs < 2) {
echo "Usage: insert_keywords($text, ...keywords)";
exit();
}
$arg_list = func_get_args();
$text = $arg_list[0];
$keywords = array_slice($arg_list, 1);
return _insert_keywords_helper($text, $keywords);
}
} else {
function insert_keywords($text, ...$keywords) {
return _insert_keywords_helper($text, $keywords);
}
}
これは、PHPのバージョン< 5.6で解析エラーがスローされます。解析エラーは致命的なエラーなので、try-catchでラップすることはできません。
私がこれをやりたい理由は、PHPバージョンとは独立してこの機能を使用できるようにするためです。私はPHPの世界にはあまり慣れていません。だから多分私はこのコードを書いているようにいくつかの仮定をしています。
ヒント
http://php.net/manual/en/function.function-exists.php –
そしてsplat演算子が存在するかどうかを確認するためにどのように使用しますか? – dotgc
構文エラーを処理することはできません。実行中ではなく、解析段階でコードが失敗するためです。古いPHPバージョンをサポートする必要がある場合は、単に 'func_num_args()'と 'func_get_args()'を使用してください。彼らはまだ新しいバージョンで利用可能です。 –