web-dev-qa-db-ja.com

PHP速記の概要

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

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

略して、私は次のようなものについて話している:

($var) ? true : false;
34
James Simpson

以下は、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];
68
Click Upvote

PHP 5.3の導入:

$foo = $bar ?: $baz;

$bartrue(else $foo)に評価される場合、$barの値を$bazに割り当てます。

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

それ以外は、他にそれほど多くはありません。 documentation を読みたいかもしれません。

22
Felix Kling

PHPで私のお気に入りの "トリック"の1つは、引数の配列を取り、デフォルトにフォールバックする関数などの状況を扱うときに array union 演算子を使用することです値。

たとえば、引数として配列を受け入れ、キー'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']}";
}    

別の楽しいことは 匿名関数 、(およびPHP 5.3)で導入されたクロージャです。たとえば、配列のすべての要素を2倍にするには、次のようにします。以下:

array_walk($array, function($v) { return $v * 2; });
16
mfonda

誰も言及しなかった??

// Example usage for: Null Coalesce Operator
$action = $_POST['action'] ?? 'default';

// The above is identical to this if/else statement
if (isset($_POST['action'])) {
    $action = $_POST['action'];
} else {
    $action = 'default';
}
4
Robert Pounder

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

最初は評価するブール式です。

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

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

3
Jacob Relkin

また、PHP7で新しく追加されたのが宇宙船オペレーターです。 usort()などのコールバックで最も役立ちます。

前:

usort($list, function ($a, $b) {
    if ($a == $b) return 0;
    return $a < $b;
});

後:

usort($list, function ($a, $b) { return $a <=> $b; });

基本的に、左側と右側の比較に基づいて、負の整数、0、または正の整数を返します。

2
Okonomiyaki3000
<?php
class Bob {

    public function isDebug(){
        return true;
    }

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


$bob = new Bob(); 

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

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

1
Natdrip

だから、ジェイコブ・レルキンはあなたが言及する「速記」が実際に「三項」演算子と呼ばれるという点で絶対に正しいです、そしてサム・デュフェルが付け加えるように、それは他の言語で非常に普及しています。言語がそれをどのように実装するかに応じて、サーバーがロジックを解釈するのがより速くなり、さらに速く読むことができます。

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

($var) ? true : false;

これを次のように読みます。

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

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

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

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

echo $output;

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

車の色は文字列「青」と同じですか?
そうである場合、ストリング「Whee this car is blue!」、そうでない場合ストリング「この車はまったくブルーではありません。」

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

1
Mattygabe

5.4以降では、配列リテラルもあるため、次のように記述する必要はありません。

$myArray = array('some', 'list', 'of', 'stuff');

あなたはただ書くことができます:

$myArray = ['some', 'list', 'of', 'stuff'];

大きな違いではありませんが、かなりいいです。

0
Okonomiyaki3000