ホームページ >バックエンド開発 >PHPチュートリアル >PHPオブジェクトプログラミングでバグが発生しました!
以下のコードに示すように db チェーン操作モデル オブジェクトを作成しました (一部のみ抜粋) 遭遇したバグ
public function insert(Array $c, $p = 'INSERT') { if(!is_null($this->px)) return $this; function i( $c, $e = ',') { $d = ''; foreach ($c as $val) { # code... $d .= $e . '('; foreach ($val as $valTow) { $d .= '"' . $valTow . '",'; $d = trim($d, ','); } // var_dump($d); $d .= ')'; } return rtrim($d, ')'); } $n = '('; $d = '('; foreach ($c as $key => $value) { $n .= '`' . $key . '`,'; if(is_array($value)) { $d = i($value); } else { $d .= '"' . $value . '",'; } } $n = rtrim($n, ',') . ')'; $d = rtrim($d, ',)'); $d .= ')'; $this->insert = $p . ' INTO ' . $this->tableName . " {$n} VALUES {$d} "; $this->px = __METHOD__; return $this; }
よく見てみると、関数があることがわかります。この関数がメソッドで定義されている場合も呼び出されると、i 関数を再定義できないことを示すエラーが発生します。
解決策は簡単です! i 関数を別の場所に記述するか、オブジェクト メソッドとして記述するだけです
したがって、複数回実行されるメソッドではこのような関数を定義しないことをお勧めします。
オブジェクトが一度だけ呼び出される場合は、次のように記述できます。
次の変更を加えることで、この問題を簡単に解決できます。 (これは解決策の1つにすぎません!)