PHPオブジェクトプログラミングでバグが発生しました!

WBOY
リリース: 2016-06-23 13:37:53
オリジナル
871 人が閲覧しました

以下のコードに示すように 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つにすぎません!)

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート