3

PHP_INT_MAXandをデフォルトの引数として使用する関数を作成し~PHP_INT_MAXましたが、'~' の構文エラーが発生しました。宣言は次のとおりです。

public static function isNumberValid($number, $lowerbound = ~PHP_INT_MAX, $upperbound = PHP_INT_MAX)

宣言を作成してから本体に設定することで修正しまし$lowerbownd = nullたが、今では完全に正常に動作します。

if (is_null($lowerbound)){
    $lowerbound = ~PHP_INT_MAX;
}

なぜだろうと思っただけですが..

4

3 に答える 3

5

オプションの変数のデフォルト値は、変数の初期値やクラス内の定数のように定数でなければなりません。~PHP_INT_MAXは定数ではなく、式です。(たとえば、 も使用できません2 + 2。)

これに関連する RFC がありました。

于 2013-09-05T18:30:25.910 に答える
2

関数パラメーターのデフォルト値は定数値でなければなりません。それらを式にすることはできません。PHP_INT_MAX はコンパイル済みの値であり、コンパイラですぐに使用できますが、ビット単位の NOT 演算を実行することで、それを式にすることになります。

function foo ($x = PHP_INT_MAX) { echo 'this is ok'; }
function bar ($x = ~PHP_INT_MAX) { echo 'this is NOT ok'; }
于 2013-09-05T18:31:55.970 に答える