マジックナンバーは定数に置き換える(せめて)
if($x == 12 )
★こうする
const SIZE = 12; // 定数を切って保守性可読性を上げる
if($x == SIZE )
その場限りの一時変数ならばわりきってそのまま使おう
$y = strlen($test);
if($x == $y )
★こうする
if($x == strlen(test) )
大したメソッドではないが汎用性が高そうなメソッドはreturnを活用せよ
function isCorrectSize($a,$b){
if( $a == 1 && $b == 2){
return true;
}
return false;
}
★こうする
function isCorrectSize($a,$b){
// 下記でOK(成立しなければfalseが返る)
return ($a == 1 && $b == 2);
}
ガード節によって条件分岐をわかりやすくしよう
$rslt = false;
if($x > 0 ){
$rslt = true;
}else{
if( $y > 0 ){
$rslt = true;
}
}
return $rslt;
★こうする
if($x > 0 ){ return true; }
if($y > 0 ){ return true; }
以降、複雑な条件を書いていく...
// 要は複雑な判定に入る前に前提の判定ができるならそれを先にしようという考え
for文など繰り返し式の中に関数を埋め込まない
for ( $i=0; $i < count($arr); i++;){
}
★こうする
$cnt = count($arr);
for ( $i=0; $i < $cnt; i++;){
}
// ループのたびにcount関数が実行され効率が悪いので、外に出した。
「&&」や「||」の論理演算子はマッチしやすい条件を先に書こう
if($x == 3 && isset($x) ){
}
★こうする
// 成立させたいのであれば、自明な条件を先に書いたほうが、可読性もよい。
// また || の場合は、左辺からマッチしたら右辺を判定せずに処理が移るため効率的。
if( isset($x) && $x == 3 ){
}
PHPでいうところの@演算子は、エラーレポートを出力しないだけで、エラー発生(throw)を止めるわけではない点に注意。
番外Tips
三項演算子は、キレイだが、内部的には一時変数に置き換えているので、普通のifelseに比べスピードはほんの少しだけ遅い
== と === での比較では、===のほうが型の自動変換がスキップされるため効率がよい。
デザインパターンのうち「FactoryMethod」「Composite」「Adapter」は抑えておく。これが分かれば1メソッドにダラダラと書き綴ることもなく、処理を関数に細かく分割するだけの構造化プログラミングとも、距離をおける。