gallu’s blog

エンジニアでゲーマーで講師で占い師なおいちゃんのブログです。

おいちゃん好みのPHPのための20Tips

インスパイアもと群。


より良いPHPerになるための20Tips
http://1-byte.jp/2011/03/20/20_tips_you_need_to_learn_to_become_a_better_php_programmer/
もっとより良いPHPerになるためのTips
http://suin.asia/2011/03/20/20_tips_you_need_to_learn_to_become_a_better_php_programmer
より良いPHPerにならないための20Tips
http://anond.hatelabo.jp/20110320223445


以下、純粋に私見です(いつものことじゃん)。
立ち位置としては…「いわゆる手続き型はある程度の種類やってる、でも最近は割合とPHP比率が多くて嘆いているプログラマ」ってあたりかしらん?


1. <?phpと?>
まず「<?ぢゃなくて<?phpを使え」については賛成。
次に「?>を書くな」も賛成。
# …あれ? 半角で<?phpを書くと…消える? エスケープ処理されてない?
# テスト。


2.設定ファイルは?
そもそもとして、普段、PHPコード「ぢゃない」設定ファイル使うから、includeできねぇしなぁw
この辺は「ならないため」の方におおむね全面的賛同。
ただ、おいちゃんは : ぢゃなくて = を使うけどw


3.コメントは?
いらんコメント多数。それでも書け。
参照: http://d.hatena.ne.jp/gallu/20101116/p1


4. インデントとスペース
…宗教論争、だねぇ(苦笑
おいちゃんは2スペース派。他人が何を使おうと、原則、とやかくはいわないし、現場の流儀には従う。


5. 変数名
基本的には「熟考すべし」。時間をかけるのもあり。
ただし「変数の型を持たせるハンガリアン」は、そもそもハンガリアンって単語に対してちょいと勉強不足。 http://d.hatena.ne.jp/gallu/20070520/p1
なお「ごく狭いスコープ」の変数で、おいちゃんは割と「1文字の変数」を多用したりはする。その辺は、どこかでちゃんとまとめて「流儀」として書いてみたいなぁ。


6. 変数の初期化
ちゃんと初期化するのは、よいしつけだと思われます。


7. 戻り値は?
例外は、個人的なスタイルとしてあんまり使わない。以前に結構なトリッキー例外を多々みているトラウマが未だに残ってる(苦笑
returnのデフォルトfalseは、その方が基本安全だとは思う。


8. 配列へのアクセス
vectorな配列なのかhashな配列なのか、を意識するほうかなぁ。いやまぁ「PHPって全部hash+listの変な配列ぢゃん」とかいう事実はおいといて。
vectorは「数値」を意識したいので、クォートなし。
hashは「文字」を意識したいので、クォートあり。


9. echo
…使わないなぁ(苦笑
普段は、printが多いかな?
printfは…昔の「案外に重いんだよ(C言語)」なイメージが結構つきまとって(苦笑:ちなみに「今」を基準にすると、ンなもん気にするほどじゃありませぬ。
使うときには使う、かなぁ。
割と、c++

std::cout << hoge << std::endl;

のイメージがあって、それっぽいように書くことが多いような気がする〜


10. 三項演算子
…読めない、っていわれたことあるからなぁ(苦笑
まぁ普通に使いますが。
あ、「ネストさせる三項演算子」はアウト。言語ごとに微妙に解決順番の差異とかがあって、面倒なので。


11. 真偽値のチェック
===の話は、さんざんっぱら「2a問題」で書いているので略。 http://d.hatena.ne.jp/gallu/20061108/p1
「ならないため」の

if ( $flag ) {
}

には、割とはっきりと反対。「後で仕様変更が発生して」面倒が起きたり、あるいは「理解して書いているのか、怠惰の結果として書いちゃったのか」とかがわかりにくいから。
一方で、書いたってたかだか数キーストローク程度、それを「やらない」積極的な理由が思い浮かばない。
ちなみにおいちゃんは

if ( true === $flag ) {
}

って書く。NTT記法とかいうんだったかなぁ? できるだけ「定数を左辺に」するの。万が一が防げるので、おいちゃん的に好み。


12. インクリ/デクリ演算子
いろいろやるけど…「他人がメンテナンスする可能性」があるコードだと、前置換と後置換の差異がでないように「単行」で使うようにはしているかなぁ。
説明すんのめんどい(苦笑


13. 代入演算子
ん…ぶっちゃけ「どっちでも」(苦笑
使う使わないのどっちも、そんなに「高い優位性」を感じていない(苦笑


14. print_rとvar_dump
…関数、いる?
まぁ「var_dumpの結果を文字列としてほしい」時があるので、それようの関数っつかメソッドは作ったが。
たぶん、デバッグのやり方が「少しだけ」違うのかも。


15. 定数
何を「設定ファイル」にして、何を「定数」にするのか、ってのは割と深い問題。
そのうち書くけど、雑にいうと
プログラマ以外触らせたくなくてかつ変更が少ないなら:定数
プログラマ以外触らせたくなくてでもそこそこの頻度の変更が見込まれるなら:定数または「触るな」設定ファイル
・ユーザが触ってもよいものは:「触ってもよい」設定ファイル
って切り分けかなぁ。


16. $_GETと$_POST
「ならない」さんところの「ラップしろ」に全面的に賛成。その方が後々、デバッグとかで便利。


17. 関数とクラス
そもそも「むき出しの関数」とか最近滅多に書かないしなぁ(苦笑
引数20個は「ダメ! ゼッタイ!!」なんだけど、一方で「引数は連想配列に」ってのもまた「ダメ! ゼッタイ!!」。
基本、どちらも根本的に「インタフェース設計でしくじってる」。


18. メソッドチェイン
ん…微妙。
setter程度で「ど〜してもチェインしたい」理由が今ひとつわからじ。


19. コードの繰り返し
通化は口を酸っぱくしていつもいう通り。
「同じ処理」じゃなくて「同じ意味」を共通化、が基本(別の角度で「同じ処理」の共通化もあるけど、それは一つ上のお話)。
で、共通化するのは「二度目」。


20. 結合度
加減…かねぇ。数やって「何となく見えてきた」んだけど、文字にできるほどは習熟できていない orz
一緒に「設計をする」チャンスがあったらお見せいたします、って感じかなぁ。
たぶん、そこのあたりが「OJTによるスキルの伝授」部分の一つなんじゃないかなぁ、って思う。


総括
立場によって違うので。おいちゃんは「PHP"も"やる、職業プログラマ」って観点。
えと…「必要なところに必要なだけこだわる」のが、おいちゃんの基本かな。言い方を変えると「不必要なところにはこだわらない」。
その「必要/不必要」を見極めるあたりが、(いらんものを含む)経験のたまもの、かなぁ。