34

私は何年も PHP でプログラミングを行ってきましたが、省略形の使い方を学んだことはありません。コードで時々出くわし、読むのに苦労するので、言語に存在する別の省略形を学び、それを読んで時間/行を節約できるようにしたいと思いますが、すべての速記の包括的な概要を見つけることができないようです。

Google で検索すると、if/else ステートメントの略記しか表示されませんが、それ以上のものがあるはずです。

簡単に言えば、私は次のようなことについて話している:

($var) ? true : false;
4

9 に答える 9

68

PHP で使用される短縮演算子の一部を次に示します。

//If $y > 10, $x will say 'foo', else it'll say 'bar'
$x = ($y > 10) ? 'foo' : 'bar';

//Short way of saying <? print $foo;?>, useful in HTML templates
<?=$foo?>

//Shorthand way of doing the for loop, useful in html templates
for ($x=1; $x < 100; $x++):
   //Do something
end for;

//Shorthand way of the foreach loop
foreach ($array as $key=>$value):
   //Do something;
endforeach;

//Another way of If/else:
if ($x > 10):
    doX();
    doY();
    doZ();
else:
    doA();
    doB();
endif;

//You can also do an if statement without any brackets or colons if you only need to
//execute one statement after your if:

if ($x = 100)
   doX();
$x = 1000;

// PHP 5.4 introduced an array shorthand

$a = [1, 2, 3, 4];
$b = ['one' => 1, 'two' => 2, 'three' => 3, 'four' => 4];
于 2010-12-31T00:52:52.037 に答える
22

PHP 5.3 の導入:

$foo = $bar ?: $baz;

if が(else )に評価される場合は、 $bartoの値を代入します。$foo$bartrue$baz

三項演算子をネストすることもできます (括弧を適切に使用して)。

それ以外は、それについて他にあまりありません。ドキュメントを読むことをお勧めします。

于 2010-12-31T00:37:37.907 に答える
16

PHP で私が気に入っている「トリック」の 1 つは、関数が引数の配列を取り、デフォルト値にフォールバックするなどの状況を処理するときに、配列共用体演算子を使用することです。

たとえば、引数として配列を受け入れ、キー'color''shape'、および ' size' が設定されていることを知る必要がある次の関数を考えてみましょう。ただし、ユーザーはこれらがどうなるかを常に知っているとは限らないため、いくつかのデフォルトを提供する必要があります。

最初の試みでは、次のようなことを試すかもしれません:

function get_thing(array $thing)
{
    if (!isset($thing['color'])) {
        $thing['color'] = 'red';
    }
    if (!isset($thing['shape'])) {
        $thing['shape'] = 'circle';
    }
    if (!isset($thing['size'])) {
        $thing['size'] = 'big';
    }
    echo "Here you go, one {$thing['size']} {$thing['color']} {$thing['shape']}";
}

ただし、配列ユニオン演算子を使用すると、これをよりクリーンにするための優れた「省略形」になる可能性があります。次の関数を考えてみましょう。最初のものとまったく同じ動作をしますが、より明確です。

function get_thing_2(array $thing)
{
    $defaults = array(
        'color' => 'red',
        'shape' => 'circle',
        'size'  => 'big',
    );
    $thing += $defaults;
    echo "Here you go, one {$thing['size']} {$thing['color']} {$thing['shape']}";
}    

もう 1 つの興味深い点は、無名関数(および PHP 5.3 で導入されたクロージャー) です。たとえば、配列のすべての要素を 2 倍するには、次のようにします。

array_walk($array, function($v) { return $v * 2; });
于 2010-12-31T00:56:13.737 に答える
3

これは三項演算子と呼ばれ、3 つのオペランドを持つブール演算子です。

1 つ目は、評価するブール式です。

2 番目は、ブール式が TRUE と評価された場合に実行する式です。

3 番目は、ブール式が FALSE と評価された場合に実行する式です。

于 2010-12-31T00:32:20.597 に答える
1

したがって、Jacob Relkinは、あなたが言及する「速記」が実際に「三項」演算子と呼ばれるという点で絶対的に正しいです。SamDufelが付け加えるように、他の言語では非常に普及しています。言語がそれをどのように実装するかによっては、サーバーがロジックを解釈するのがさらに速くなるだけでなく、それをより速く読むことができる場合もあります。

したがって、新しいロジックやこのような新しい演算子を学習するときに役立つのは、英語(または母国語が何であれ)をそれに合わせて考えることです。文章で説明してください。あなたの例を通して話しましょう:

($var) ? true : false;

これは次のように読む必要があります:

$ varは本当ですか? $ varがの場合、値trueを返します。$ varがfalseの場合、値falseを返します

疑問符は、出力を決定する質問をしていることを思い出させるのに役立ちます。

三項演算子のより一般的な使用例は、必ずしもブール値ではないものをチェックする場合ですが、ブール論理を使用してそれを記述することができます。たとえば、(PHPの)文字列のような変数である、Carというプロパティを持つオブジェクトを考えてみましょう。color文字列が真であるか偽であるかは意味がないため、質問することはできませんが、文字列についてさまざまな質問をすることができます。

$output = $car->color == "blue" ? "Wheee this car is blue!" : "This car isn't blue at all.";

echo $output;

したがって、この行は次のようになります。

車の色は「青」の文字列と同じですか?
そうである場合は、「この車は青いです!」という文字列を返します。、それ以外の場合は、「この車はまったく青ではありません」という文字列を返します。

三項演算子が返すものはすべて、$ outputを使用して代入ステートメントの右側で使用され、その文字列が出力されます。

于 2011-01-15T03:42:53.230 に答える
1
<?php
class Bob {

    public function isDebug(){
        return true;
    }

    public function debug(){
        echo 'yes dice!!!';
    }
}


$bob = new Bob(); 

($bob->isDebug()) && $bob->debug(); 

これは別バージョンの速記です。これが誰かを助けることを願っています

于 2014-05-28T21:17:49.253 に答える