2016-05-30 4 views
0

私は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の世界にはあまり慣れていません。だから多分私はこのコードを書いているようにいくつかの仮定をしています。

ヒント

+0

http://php.net/manual/en/function.function-exists.php –

+0

そしてsplat演算子が存在するかどうかを確認するためにどのように使用しますか? – dotgc

+0

構文エラーを処理することはできません。実行中ではなく、解析段階でコードが失敗するためです。古いPHPバージョンをサポートする必要がある場合は、単に 'func_num_args()'と 'func_get_args()'を使用してください。彼らはまだ新しいバージョンで利用可能です。 –

答えて

0

あなたは幹部または類似の機能を使用できる場合は、これを試してみてください。

Catching fatal error

は、そのファイルを実行し、その結果を解析するよりも、スプラットオペレータとの単純なファイルを作成します。結果をどこかに保存して、最初の実行時に確認するか、月に1回だけチェックすることをお勧めします。

関連する問題