72
72

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

「保守性・管理性が劇的に上がるPHPのスマートなコードの書き方12選」が酷すぎて草

Last updated at Posted at 2014-08-11

http://bulkserver.jp/blog/2014/08/07/php-code/
正直釣りではないかと疑うレベル。

1.括弧の省略
この括弧は基本的にはつけますが、中の実行コードが1つだけの場合は省略することができるのです。
命令が二つ以上であれば括弧でくくる必要があります。セミコロン(;)が2個以上のときはカッコでくくり、1個の場合は省略してもよいと覚えるといいでしょう。
省略することで見やすくなるので、おすすめです。

いきなり有り得ない。
{}の省略は絶対的悪手で厳禁です。

PSR-2
http://www.infiniteloop.co.jp/docs/psr/psr-2-coding-style-guide.html

各構造本文は、中括弧で囲わなければなりません。 これは構造の見え方を標準化し、追加実装等が発生した際のエラーを抑えます。

Zend framework
http://framework.zend.com/manual/1.12/ja/coding-standard.coding-style.html

場合によっては、これらの文で波括弧が必要ないこともあります。 しかし、このコーディング規約では、このような例外を認めません。 "if"、"elseif" あるいは "else" 文では、常に波括弧を使用しなければなりません。

Pear
http://pear.php.net/manual/ja/standards.control.php

構文的に省略可能な場合でも、波カッコを使用することを推奨します。 波カッコを付けることにより可読性が向上し、 新しく行を追加した際に論理的なエラーが紛れこむ可能性が減少します。

CakePHP
http://book.cakephp.org/2.0/ja/contributing/cakephp-coding-conventions.html

制御構造では、必要でなくとも常に中括弧を使います。 これはコードの可読性を高め、論理エラーが発生しにくくなります。

Symfony2
http://docs.symfony.gr.jp/symfony2/contributing/code/standards.html

制御文の本体の行数に関わらず、波括弧で制御文本体を囲います

CodeIgniterYiiには記載無し。

Pearが推奨している以外は全て{}必須です。

2.三項演算子
3.switch文

ここはまあいいや。
でもswitchのほうは例題がおかしいな。

4.for文
繰り返しの処理には以下のようにwhile文を使用します。

いや、どこの世界の常識だよ。
forとwhileとforeachは目的に応じて使い分けるべき。
つうかこの中じゃwhileが一番使わないよな。

5.変数宣言のみで配列への要素追加
配列への要素の追加はarray_pushを以下のように用います。

array_push()は関数呼び出しのオーバーヘッドがあるので、$array[]を使うのがデフォルト。
何らかの理由がある、あるいは配列を追加するときにarray_push()を使う、とすべき。

6.引数のデフォルト値
function test ($a = デフォルト値 , $b = デフォルト値 , $c)

このような書き方はできない。
http://php.net/manual/ja/functions.arguments.php

引数のデフォルト値を使用する際には、デフォルト値を有する引数はデフォルト値がない引数の右側に全てある必要があることに注意して下さい。そうでない場合、意図したような動作が行われません。

.

7.関数でのglobal宣言

global死すべし。

8.条件式での変数定義
それがtrueやfalseを示すものであれば、それ自体を条件式の中で変数に代入することができます。

いやそんな新発見みたいに言われても。
ファイル読み込みとか定番ですよね。

http://php.net/manual/ja/function.fgets.php
while (($buffer = fgets($handle, 4096)) !== false)
http://qiita.com/rana_kualu/items/8b4e09f0410605f8180c
while(($now = gmp_nextprime($now)) < $max)

例のように比較で括ればtrue/false以外のものも代入可能。

9.文字列への変数挿入
'私は'.$name.’と言います。年齢は’.$old.’歳です。よろしくおねがいします。’;
"私は{$name}と言います。年齢は{$old}歳です。よろしくおねがいします。";

'私は' . htmlspecialchars($name, ENT_QUOTES, 'UTF-8') . ’と言います。年齢は’. (int)$old . ’歳です。よろしくおねがいします。’;
だよなあ。
つうか年齢にoldって。

10.empty

なんか微妙だけどまあいいや。
リファレンスくらい示しておいた方がいいとは思いますが。

11.関数の中で同じ関数の呼び出し

再帰呼出しってキーワードくらい出しとこうよ。
どうでもいいが他項目のレベルに比べて再帰だけ妙にハードル高い気がする。

function test($num){
    if($num<10){
        $a=$num++;
        test($a);
    }else{
        return false;
    }
}

あとこの関数は永久に止まりませんね。

12.結合代入演算子(.=)
とても便利なので覚えてくといいでしょう。

さすがにこれを知らないとか無いだろ。
+=とか<<=も個別に紹介していく気だろうか。

まとめ

1、6、7以外はいちゃもんみたいになってしまったが、まあとにかく参考にしてはならないという点は揺るがない。
これを真に受けて{}を省略する人が出てこないことを祈るのみです。

72
72
7

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
72
72

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?