2

phpのすべてのバージョンで、いくつかの新機能が追加され、いくつかの機能が停止されます。

例:

<?php
$hex = hex2bin("6578616d706c65206865782064617461");
var_dump($hex);
?>

hex2binはphp5.4.0で導入されたため、php5.4.0以降が必要になります。
phpコードで使用されるすべての組み込み関数について、php.netでバージョンの依存関係を手動で確認するのは面倒です。特定のphpコードを実行するために必要なphpインストールの最小バージョン(および該当する場合は最大バージョン)を識別する自動/半自動の方法はありますか?

4

5 に答える 5

2

バージョンが必要なphpをチェックインする方法があるかどうかはわかりませんが、「function_exists」を使用して、ご使用のバージョンのphpにその機能があるかどうかを確認できます。

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

<?php
if (function_exists('hex2bin')) {
    echo "hex2bin function is available.<br />\n";
} else {
    echo "hex2bin function is not available.<br />\n";
}
?>
于 2013-01-08T11:36:40.963 に答える
2

ライブラリ/プロジェクトの依存関係を述べるのはプログラマー次第です。

現在、多くのプロジェクトでComposerを依存関係マネージャーとして使用していますが、レガシーコードの場合は、Composerを実行してエラーを警告する以外に、多くのことを行うことはできません。

于 2013-01-08T11:38:33.017 に答える
1

PHPCompatibilityプロジェクトをチェックしてください:https ://github.com/wimg/PHPCompatibility これは、5.2、5.3、5.4、および5.5(執筆時点ではalpha2)との互換性についてコードをテストします。

于 2013-01-09T21:17:38.367 に答える
1

フォールバックを行うことをお勧めします。この関数で述べたように、代替手段があります。

if ( ! function_exists('hex2bin')) {
    function hex2bin($hexstr)
    {
        $n = strlen($hexstr);
        $sbin="";  
        $i=0;
        while($i<$n)
        {      
            $a =substr($hexstr,$i,2);          
            $c = pack("H*",$a);
            if ($i==0){$sbin=$c;}
            else {$sbin.=$c;}
            $i+=2;
        }
        return $sbin;
    }
}

コードはジョンソンの返信に基づいています。

新しい機能が存在しない場合と同じように機能を設定することで、非互換性を恐れることなくビジネスを進めることができます。編集する理由がない場所にこれらを非表示にするだけで、邪魔になりません。

于 2013-01-08T11:40:48.207 に答える
1

手動チェックを作成してから、「パッチ」を使用して、不足しているものを定義できます。

phpversion();を使用する

 if (strnatcmp(phpversion(),'5.2.10') >= 0) 
 { 
       //loading patch

 } 
 else 
 { 
     //loading patch
      function abc(){
        //
      }
 } 
于 2013-01-08T11:41:35.357 に答える