本篇包含前端和后台,是博主在实际开发中遇到的一些“本应该是这样却不是这样的问题”: 一、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){ echo '数据更新成功!'; }else{ echo '数据更新失败!'; } $result = M(“user”)->where('uid = 2')->setField('email','Jack@163.com'); if($result){ echo '数据更新成功!'; }else{ echo '数据更新失败!'; } if($result !== false){ echo '数据更新成功!'; }else{ echo '数据更新失败!'; } 随便一提,===与==相比,还要求数据类型相同。 三、 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();