PHP开发的注意点(持续更新)

背景知识

  1. 这一篇博客会持续更新和维护,主要是记录一些平常工作上或者学习过程中遇到的一些注意事项,希望和大家学习与共勉。

 

1.关于json_encodejson_decode两个函数的注意点:


1.json_decode():通常是将一个json字符串转成数组或者对象。
例如:
    $json='{"name":"sanjin"}';
    json_decode($json);  //转成对象
    json_decode($json,true);  //转成数组

2.json_encode(): 通常是将一个数组转成json字符串的形式。
例如:
    $array=array("name"=>"三斤和他的喵");
    json_encode($array);  //将数组转成json字符串,中文会进行unicode编码,类似'\u***'

注:如果不希望中文进行unicode编码,可以传入第二个参数为JSON_UNESCAPED_UNICODE。( 在做微信开发的使用,通常是需要传入这个参数的 )
    json_encode($array,JSON_UNESCAPED_UNICODE);

2.三元运算符的小技巧:


三元表达式 --> 表达式 ? 值1 :值2    当表达式为真取值1,表达式为假取值2。
小技巧:当值1不写的时候,且表达式为真时,这个时候取值就是表达式的值

案例:
    $a=100;
    $b=$a?:20;  // $b为100

    $a=100;
    $b=$a==100?:20  //$b为true

3.有时候使用git进行代码管理时会出现commit提交备注信息写得不正确,那么如何撤回呢?

git log   #查看提交的日志

git reset  log-id  #这个命令会撤回commit提交,但是代码的修改不会撤销。这时候我们可以重写编辑备注信息再提交

git reset -hard log-id  #这个命令则完全回退到上一个版本

4.apache中配置url重写需要在web根目录放置一个.htaccess文件,内容如下:

<IfModule mod_rewrite.c>
  Options +FollowSymlinks -Multiviews
  RewriteEngine On
  RewriteCond %{REQUEST_FILENAME} !-d
  RewriteCond %{REQUEST_FILENAME} !-f
  RewriteRule ^(.*)$ index.php?/$1 [QSA,PT,L]
</IfModule>

5.错误控制运算符@,主要是为了忽略表达式可能产生的一些错误。

//需要注意的是"@"要放在表达式之前。
@get_max();  //正确的
@function get_max(){};  //错误的,因为函数的定义并不是表达式

6.工作中出现频率最高的一组cp:implode()explode()

#implode()将数组拼接成字符串
implode(',',array('我','爱','你')) --->  '我,爱,你'

#explode()将字符串打散成数组
var_dump(explode(',','我,爱,你'))  ---> array('我','爱','你')

7.form表单的默认提交方式GET,由于GET的方式要比POST的方式能提交的数据少的多,因此可能会出现使用GET提交数据时,数据被截断导致不完整的情况,需要注意。

8.需要输出大段文本的时候,跳出解析模式通常要比将文本通过echo或者print输出更有效率,对比如下代码:

#方式一:跳出解析模式
<?php if($type==1):?>
the type is 1
<?php else:?>
the type is not 1

#方式二:使用echo或者print输出
<?php 
    if($type==1){ 
        echo 'the type is 1';
    }else{
        echo 'the type is not 1';
    }
?>

9.有点坑:有没有小伙伴也和我一样曾以为空对象执行empty()函数返回true:

class Dog{
}

$dog= new Dog();
var_dump(empty($dog));  //实际返回的false

//那么问题来了,如何判断对象是否为空呢?使用get_class_methods配合get_class_vars()
if(empty(get_class_methods($dog))&&empty(get_class_vars(get_class($dog)))){
    echo '空对象';
}

10.有一个业务需求是这样子的----文章的展示按照创建时间排序,最新的排在前面,如果有置顶的文章则置顶排序。我这里提供一种实现思路:设置一个top字段,用来记录置顶操作的时间戳,取文章的时候先对top进行排序再对create_time进行排序。

11.关于微信昵称的存储:做过微信开发的小伙伴可能会发现自己设置的utf8字符集的字段存储微信昵称时有时候会出现乱码,这是因为昵称中包含了emoji表情,而utf8是无法存储这种四个字节的表情,解决方法:

方案一:
    如果数据库的版本比较新可以设置字符集为utf8mb4 (mysql5.5之后才支持)
方案二:
    使用base64_encode()加密存储和base64_decode()解密读取
注意点:base64加密之后字符串的长度会改变,注意设置字段相应的长度避免被截断

12.数据库连接错误:SQLSTATE[HY000] [2002] No such file or directory 出现这个错误的原因是PHP数据库驱动找不到sock文件。解决方案:打开php.ini找到配置项:pdo_mysql.default_socket 将值设置为mysql的sock文件地址即可:

13.max系统将本地文件上传至服务器的命令:


scp  -r 本地文件夹路径  root@远程ip:路径
例如: scp -r test22  root@119.23.70.61:~
将当前文件夹test22上传至root用户的家目录

14.运行yii框架的命令行程序报错:PHP Warning ‘yii\base\ErrorException’ with message ‘exec() has been disabled for security reasons,这是因为exec()函数不可用,解决方案:

15.不知道读者有没有碰到过类似的问题:本地设置数据库时间字段的默认值为"0000-00-00 00:00:00"是可以的,但是导入到服务器的数据库中则报错:ERROR 1067 (42000): Invalid default value for 'create_time'。这是因为sql语句模式的问题,解决方案:

16.连接mysql的命令

mysql -uroot -p -h127.0.0.1 -P3306

17.mac连接服务器:

ssh 用户名@服务器地址

有时候连接会出现如下错误:

执行如下命令,删除 /Users/weixin/.ssh/known_hosts即可:

rm -rf /Users/weixin/.ssh/known_hosts

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值