PHP
アンチパターン
クソコード

本当にあった、怖いコードの話

社内Webサービスで本当にあった、クソコードを列挙していきます
アンチパターンの参考にして下さい

  • 嘘をつくメソッド名
  • 未完成のPHPDoc
  • 無限に続くTypo
  • 同じような識別子
  • 使われない引数
  • 頑なにswitchを使わない
  • フレームワーク上でフレームワークの機能を使わない
  • ActiveRecordの自前実装

嘘をつくメソッド名

public function serchCastamerIdByTeamId($teamId): Customer

おまけにTypoしてる

未完成のPHPDoc

/**
 * 定期課金リストを取得する
 * @return [type]          [description]
 */
public function getChargeScheduleList($notShowDeleteRow=False){

ちなみに、この引数の$notShowDeleteRow$hideDeletedRowみたいに置き換える(notで否定する代わりに、対義語を用いる)ほうがいいよね

無限に続くTypo

define("VARSION", 1.3);

あとは各ソースコードでこれを参照するだけ。わお。

同じような識別子

$this->service = "楽天";
$this->serviceName = RAKUTEN; //define("RAKUTEN", "rakuten");

使われない引数

public function getChargeByTeamId($teamId){
    return OmiseCharge::retrieve($this->teamId);
}

頑なにswitchを使わない

PHPのswitchはオブジェクトの比較時に、比較演算子として == を用いる。
ここで、こういった記事に踊らされて
頑なにswitchを使わず、=== と if~elseif~elseを用いる人がいる。

if($pid === 1){
  //
}else if($pid === 2){
  //
}else if($pid === 3){
  //
}

(そもそも、多くの場合において条件分岐を用いること自体がうまくポリモルフィズムを扱えてない証拠、ということは置いておいて、)素直にswitch使おうね。

ただし、

switch(true){
    case $pid === 1:
        //
    case $pid === 2:
        //
}

これみたいにswitch使えって事じゃないからね💢💢

フレームワーク上でフレームワークの機能を使わない

これに比べれば上の奴らなんてまだ可愛い方ですよ。
「フレームワーク上でフレームワークの機能を使わない」ってのは、例えばLaravelだと、

  • ActiveRecord(LaravelだとEloquent ORM)を使わずに\mysqliをつかう
  • 提供されてるServiceProvider、Controllerとかを一切無視して自前実装する

などの大罪を意味します。

こういったことをする人たちは転職をお勧めします。

ActiveRecordの自前実装

最後にインパクトが弱いのきてしまいましたね。
これに関しては共通理解を得にくいんじゃないかと思います
詳しくはこれをご覧ください

まとめ

少なくとも、Typo、メソッド名、PHPDocはちゃんと直そう

PHPDoc、Typoに関してはPHPStormとかのIDEを使えばちゃんと指摘してくれるので、AtomとかよりPHPStormなどのIDEを使って欲しい。

フレームワーク上でフレームワークの機能を使わないは今すぐ転職