zoukankan      html  css  js  c++  java
  • php对象编程遇到的BUG!

    自己写了个db链式操作模型对象如下代码所示(只摘取了其中一小段)遇到的bug

        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函数写到其他地方或者写成对象方法;

    所以建议不要在多次运行的方法里面这么定义函数!

    如果对象只被调用一次则可以这么写!

    做出如下修改就可以轻松解决问题了!(这只是其中一个解决方案!)

        public function insert(Array $c, $p = 'INSERT') {
            if(!is_null($this->px)) return $this;
            
            $n = '(';
            $d = '(';
            foreach ($c as $key => $value) {
                $n .= '`' . $key . '`,';
                if(is_array($value)) {
                    $d = $this->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;
        }
        
        private 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, ')');
        }
  • 相关阅读:
    ubuntu 12.04 配置iscsi共享及挂载iscsi共享
    python_数据类型
    python_基本操作
    shell习题第5题:批量更改文件后缀名
    shell习题第4题:监控ip地址存活
    shell习题第3题:统计内存大小
    shell习题第2题:统计ip访问量
    shell习题第1题:每日一文件
    IIS网站的应用程序与虚拟目录的区别及应用
    http状态码
  • 原文地址:https://www.cnblogs.com/dsphper/p/4368790.html
Copyright © 2011-2022 走看看