忍者ブログ
[PR]
×

[PR]上記の広告は3ヶ月以上新規記事投稿のないブログに表示されています。新しい記事を書く事で広告が消えます。



2024/04/24 21:11 |
「保守性・管理性が劇的に上がるPHPのスマートなコードの書き方12選」が酷すぎて草
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.関数の中で同じ関数の呼び出し

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


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

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


> まとめ

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


2014/08/11 21:27 | Comments(2) | PHP

コメント

> 9.文字列への変数挿入
これだけは、あんたがないわ。
文字列処理部は、すでにhtmlspecialcharsやintの処理を施したものを$nameと$oldに入れておくべき。

表示に直結するもの(ビュー)に処理(ロジック)を紛れ込ますのは見栄えがよくない。
posted by 名無しじゃなきゃダメなのぉ! at 2014/08/18 15:40 [ コメントを修正する ]
文字列連結は、sprintfとかvsprintfを使うべき。

sprintf('私は%sと言います。年齢は%d歳です。よろしくおねがいします。', $name, $old);
vsprintf('私は%sと言います。年齢は%d歳です。よろしくおねがいします。', array($name, $old));

Cの時代から続く鉄則ですわ。
posted by 名無しじゃなきゃダメなのぉ! at 2014/08/28 17:01 [ コメントを修正する ]

コメントを投稿する






Vodafone絵文字 i-mode絵文字 Ezweb絵文字 (絵文字)



<<jThreeでMMDミクさんが踊る | HOME | 買ったものリスト 2014/08/10>>
忍者ブログ[PR]