thinkphp开发中你需要注意的一些小问题
本篇包含前端和后台,是博主在实际开发中遇到的一些“本应该是这样却不是这样的问题”:
一、checkbox设置勾选:
- $(...).attr("checked","checked");
但是并没有效果,这时候应该使用:
- $(...).prop ("checked","checked");
二、很多人判断一条sql是否执行成功,喜欢用下面的语句:
- $result = M(“user”)->where('uid = 2')->setField('email','Jack@163.com');
- if($result){
- echo '数据更新成功!';
- }else{
- echo '数据更新失败!';
- }
但是有的时候明明我们已经修改成功,却会打印出更新失败,为什么呢,因为setField成功时会返回受影响的行,比如你setField一个人sex是0,如果数据库里他的sex本来就是0,这时候setField会返回0,因为他没有改变任何一行,所以if($result)的结果当然是false,更新失败。这时候应该改为:
- $result = M(“user”)->where('uid = 2')->setField('email','Jack@163.com');
- if($result !== false){
- echo '数据更新成功!';
- }else{
- echo '数据更新失败!';
- }
三、foreach 修改 $u
- foreach ($users as $u) {
- $u['a'] = 1;
- }
这样是不能再foreach内部修改$u的,如果要修改,需要加上&
- foreach ($users as &$u) {
- $u['a'] = 1;
- }
四、在Controller中用M可以直接操作数据库,但是如果要使用Model的方法操作数据库,需要使用D。
- M('Home\Model\User')->getAll();
会报错 getAll()方法不存在。
- D('Home\Model\News')->getAll();
五,就算是display:none 的input标签的值也可以submit,这个常常用来在用户输入的界面绑定一些其他的数据,例如用户id。
六、hasownproperty会判断一个js 对象是否包含某个属性或者方法,但是不能判断原型链,所以判断一个js是否包含某个熟悉使用in
- var a = new myName
- 'setName' in a;
随便一提js 中in还可以用来遍历数组。
七、
- $i = 1;
- M("Q")->where("id=%d",$i)->find();
下面这样写是正确的,但是如果是字符串,
- $i = "lina";
- M("Q")->where("name=%s",$i)->find();
这样写生成的sql语句是错误的,一定记得给%s加上引号
- $i = "lina";
- M("Q")->where("name='%s'",$i)->find();
八、对于类中的静态变量或者常量,即const和static修饰的变量 ,例如:public static $EPAGE = 15; 不能用
$this->$EPAGE去访问,要用self,例:self::$EPAGE
九、tp的构造函数_initialize会自动调用父类的_initialize方法,而php本身的构造函数 __construct ,如果子类和父类都存在__construct,那么不会自动去调用父类的__construct,如果想使用父类的__construct,需要使用 parent::__construct()。
十、php在new一个类的时候,如果不是当前命名空间的类,需要在前面加上\,例如;
- Vendor('phpexcel.PHPExcel');
- $objPHPExcel = new PHPExcel();
- print_r($objPHPExcel);exit();
会报错 Class 'Admin\Controller\PHPExcel' not found ,就是因为new的时候是在当前命名空间寻找PHPExcel,需要改成: $objPHPExcel = new \PHPExcel();
原文:https://blog.csdn.net/u013090676/article/details/76731478