12

PHP で省略形を書くには、いくつかの良い方法があります。

あまり一般的ではありませんが、最も短い例:

!isset( $search_order ) && $search_order = 'ASC';

より一般的ですが、少し長くなります:

!isset( $search_order ) ? $search_order = 'ASC' : $search_order = NULL;

上記の例を組み合わせて、驚くべき速記にすることもできます。

!isset( $_POST['unique_id'] ) && preg_match( '/^[a-zA-Z0-9]{8}$/', $_POST['unique_id'] ) ? $post_unique_id = $_POST['unique_id'] : $post_unique_id = NULL;


しかし、上記の例を関数と戻り値でどのように使用すればよいでしょうか。例:

function filter_gender_request($data) {  
    preg_match('/(fe)?male/i', $data, $data);
    isset($data[0]) && return $data[0]; // It doesn't work here with return
}

同時に、次のように述べると、代わりにisset($data[0]) && return $data[0];すべてが期待どおりに機能します。

if (isset($data[0]) ) {
    return $data[0];
}

ここで何が間違っていますか?最初で最も短い例が関数の外で問題なく動作する場合、なぜ return で動作しないのでしょうか?

return で短縮形を使用する可能性はありますか?

4

6 に答える 6

35

現在の構文では、が設定されていないときに関数が何を返すと思います$data[0]か? 確かに、条件によっては、関数が何も返さないとは思わないでしょう。

私が見る唯一の代替手段は、設定されていない場合以外の何かを返す三項演算子です。$data[0]

return isset($data[0]) ? $data[0] : null; 
于 2013-08-27T20:14:53.020 に答える
2

あなたが何をしているのかわかりませんが、これはうまくいくはずです:

return ( isset($data[0]) ? $data[0] : false);
于 2013-08-27T20:19:24.753 に答える
1

ここで回答されたことに同意すると、その省略形は、いったんそれから離れて戻ってくるか、さらに悪いことに、将来別の開発者になると読みにくくなります。

小さな 500 行のスクリプト ファイルでさえ、40 行の省略形の elseif を使用していると想像してみてください。コードを追加または変更しようとしても大丈夫でしょうか?

特に、主題や内容がなじみのないものである場合は、デバッグや追加が頭痛の種になります。

これははるかに扱いやすく、それが何であるかは問題ではありません。それは単なるコードです:

if ($var == 'unicorns')
  {
    $this->remove_horn;
  }
elseif ($var == 'horse')
 {
   $this->glue_on_horn;
 }
else
  {
    $this->must_be_a_zebra;
  }

ただ言って

于 2013-08-27T20:26:14.930 に答える