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, ')');}
转载于:https://www.cnblogs.com/dsphper/p/4368790.html
php对象编程遇到的BUG!相关推荐
- python最常用的编程方式是什么_python常用模块和对象编程
1.摘要 常用模块 对象编程 领域模型 2.常用模块 2.1shutil模块 2.1.1 shutil.copyfileobj(fsrc, fdst[, length]) 1 f = open(&qu ...
- python面相对象编程指南_Python面向对象编程指南
抽象是隐藏多余细节的艺术.在面向对象的概念中,抽象的直接表现形式通常为类.虽然Python是解释性语言,但是它是面向对象的,从设计之初就已经是一门面向对象的语言.Python基本上提供了面向对象编程语 ...
- python面向对象编程138讲_Python---面向对象编程-1
我写博客是为了自己更好去理解Python编程,所以大佬略过勿喷,如果有错的地方欢迎指点. 什么是面向对象编程? 皮一下还是可以的....但皮几万就不行了! 现在开始进入主题,编程的风格有无数种,但总起 ...
- 【推荐】JS面象对象编程视频教程
一.JS面象对象编程(上) 二.JS面象对象编程(中) 三.JS面象对象编程(下) 转载于:https://www.cnblogs.com/artwl/archive/2011/07/24/21155 ...
- 面对对象编程(OOP, Object Oriented Programming)及其三个基本特性
一千个读者,一千个哈姆雷特.对于面对对象编程,书上都会告诉我们它有三个基本特性,封装,继承,多态,但谈起对这三点的见解,又是仁者见仁智者见智,感觉还是得多去编程中体验把 . 面向对象编程(OOP, O ...
- JavaScript基于对象编程
2019独角兽企业重金招聘Python工程师标准>>> JavaScript基于对象编程 1.JavaScript变量/函数声明在代码执行之前被解析,并且变量声明优先级高于函数声明. ...
- C++学习之路: 线程封装(基于对象编程)
引言: 此次我们重新封装线程, 采用基于对象编程的方式,不用于面向对象编程中重定义虚函数的方式,这里我们用回调函数的方式. Thread.h 1 #ifndef THREAD_H_ 2 #define ...
- JavaScript学习总结(九)——Javascript面向(基于)对象编程
转载自 JavaScript学习总结(九)--Javascript面向(基于)对象编程 一.澄清概念 1.JS中"基于对象=面向对象" 2.JS中没有类(Class),但是它取了 ...
- 《Essential C++》读书笔记 之 基于对象编程风格
<Essential C++>读书笔记 之 基于对象编程风格 2014-07-13 4.1 如何实现一个class 4.2 什么是Constructors(构造函数)和Destructor ...
最新文章
- 公平锁非公平锁的实际使用_3. redisson源码公平锁之队列重排序
- GDUFE ACM-1045
- C++primer plus第六版课后编程题答案8.3(正解)
- 配置Struts2的异常处理
- 宁德时代上半年实现营业收入440.75亿元,净利润44.84亿元
- RAM调优之日志分析
- 关于 Pycharm专业版 安装教程,简单好用
- 第3章 IP地址规划技术
- 音频(一)时域图、 频谱图 Spectrum
- How does “mov (%ebx,%eax,4),%eax” work?
- 安卓无线蓝牙耳机哪款好?实惠好用的蓝牙耳机品牌
- 【C++】用代码写一个气派的圣诞树发给身边的亲朋好友
- PTA 7-2 USB接口的定义(接口、接口变量、接口数组)
- [修改 Mysql5.7密码策略]Your password does not satisfy the current policy requirements
- 2018中国区块链金融生态大会
- 【2014 年末岁首】
- 无锡设计培训——室内设计风格有哪些?
- 微信小程序开发之——文件上传
- 【DATAGUARD】物理dg的switchover切换(五)
- ios appicon 桌面图标不见了
热门文章
- 奇异值分解和图像压缩
- ADAS越来越热,这家公司为何能俾睨群雄
- Debian普通用户添加sudo权限
- python函数解释
- BeautifulSoup的高级应用 之 contents children descendants string strings stripped_strings
- 【转】Cvmat与IplImage的相互转换
- 河南省住建厅调研新郑智慧城市建设 市民享受服务便利
- HTML5学习笔记(十八):闭包
- Angular面试从喜剧到悲剧的十个问题
- Spring MVC 基础注解之@RequestMapping、@Controller、(二)