85

重複の可能性: PHP 演算子「?」とは と「:」が呼び出され、彼らは何をしますか?

http://twitto.org/より

<?PHP
    require __DIR__.'/c.php';
    if (!is_callable($c = @$_GET['c'] ?: function() { echo 'Woah!'; }))
        throw new Exception('Error');
    $c();
?>

Twitto は、PHP 5.3 以降で利用可能ないくつかの新機能を使用します。

  1. DIR定数_
  2. オペレーター
  3. 無名関数

  1. PHP 5.3の?:で番号 2 は何をしますか?

  2. また、匿名関数とはどういう意味ですか? それは昔からあるものではありませんか?

4

3 に答える 3

140

?:以前は次のようにしか使用できなかった条件演算子の形式です。

expr ? val_if_true : val_if_false

5.3 では、中間部分を省略することができます。たとえば、次のようになりexpr ?: val_if_falseます。

expr ? expr : val_if_false

マニュアルから:

PHP 5.3 以降、条件演算子の中間部分を省略することができます。Expressionは、評価された場合は をexpr1 ?: expr3返し、そうでない場合は返します。expr1expr1TRUEexpr3

于 2010-01-28T08:36:39.880 に答える
36

?:演算子は条件演算子です(しばしば三項演算子と呼ばれます):

式は、(expr1) ? (expr2) : (expr3)評価されるexpr2場合はTRUEexpr1評価され、評価される場合はFALSEに評価されます。expr3expr1

の場合:

expr1 ?: expr2

式は、 trueexpr1の場合とそうでない場合の値に評価されます。expr1expr2

PHP 5.3 以降、三項演算子の中間部分を省略することができます。Expressionは、 TRUEと評価された場合にexpr1 ?: expr3戻り、そうでない場合に戻ります。expr1expr1expr3

于 2010-01-28T08:38:18.820 に答える
5

ここを見て:

PHP 5.3 以降、三項演算子の中間部分を省略することができます。式 expr1 ?: expr3 は、expr1 が TRUE と評価された場合は expr1 を返し、それ以外の場合は expr3 を返します。

匿名関数:いいえ、 5.3.0 より前には存在しませんでした(例の下の最初の注を参照)。少なくとも次のように:

function ($arg) { /* func body */ }

唯一の方法は でしたcreate_function()。これは遅く、非常に面倒で、エラーが発生しやすくなります (関数定義に文字列を使用するため)。

于 2010-01-28T08:38:22.730 に答える