A-A+

thinkphp开发中你需要注意的一些小问题

2018年11月07日 PHP开源系统 暂无评论 阅读 0 views 次

本篇包含前端和后台,是博主在实际开发中遇到的一些“本应该是这样却不是这样的问题”:

一、checkbox设置勾选:

  1. $(...).attr("checked","checked");  

但是并没有效果,这时候应该使用:

  1. $(...).prop ("checked","checked");  

二、很多人判断一条sql是否执行成功,喜欢用下面的语句:

  1. $result = M(“user”)->where('uid = 2')->setField('email','Jack@163.com');  
  2.  if($result){  
  3.         echo '数据更新成功!';  
  4.     }else{  
  5.         echo '数据更新失败!';  
  6.     }  

但是有的时候明明我们已经修改成功,却会打印出更新失败,为什么呢,因为setField成功时会返回受影响的行,比如你setField一个人sex是0,如果数据库里他的sex本来就是0,这时候setField会返回0,因为他没有改变任何一行,所以if($result)的结果当然是false,更新失败。这时候应该改为:

  1. $result = M(“user”)->where('uid = 2')->setField('email','Jack@163.com');  
  2.  if($result !== false){  
  3.         echo '数据更新成功!';  
  4.     }else{  
  5.         echo '数据更新失败!';  
  6.     }  

三、foreach 修改 $u

  1. foreach ($users as $u) {  
  2.      $u['a'] = 1;  
  3.  }   

这样是不能再foreach内部修改$u的,如果要修改,需要加上&

  1. foreach ($users as &$u) {  
  2.      $u['a'] = 1;  
  3.  }   

四、在Controller中用M可以直接操作数据库,但是如果要使用Model的方法操作数据库,需要使用D。

  1. M('Home\Model\User')->getAll();  

会报错 getAll()方法不存在。

  1. D('Home\Model\News')->getAll();  

五,就算是display:none 的input标签的值也可以submit,这个常常用来在用户输入的界面绑定一些其他的数据,例如用户id。

六、hasownproperty会判断一个js 对象是否包含某个属性或者方法,但是不能判断原型链,所以判断一个js是否包含某个熟悉使用in

  1. var a  = new myName  
  2. 'setName' in a;  

随便一提js 中in还可以用来遍历数组。

七、

  1. $i = 1;  
  2. M("Q")->where("id=%d",$i)->find();  

下面这样写是正确的,但是如果是字符串,

  1. $i = "lina";  
  2. M("Q")->where("name=%s",$i)->find();  

这样写生成的sql语句是错误的,一定记得给%s加上引号

  1. $i = "lina";  
  2. 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一个类的时候,如果不是当前命名空间的类,需要在前面加上\,例如;

  1. Vendor('phpexcel.PHPExcel');  
  2. $objPHPExcel = new PHPExcel();  
  3. print_r($objPHPExcel);exit();  

会报错  Class 'Admin\Controller\PHPExcel' not found ,就是因为new的时候是在当前命名空间寻找PHPExcel,需要改成: $objPHPExcel = new \PHPExcel();

原文:https://blog.csdn.net/u013090676/article/details/76731478

标签:

给我留言