背景知识
1.关于json_encode和json_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文件,内容如下:
Options +FollowSymlinks -Multiviews
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^(.*)$ index.php?/$1 [QSA,PT,L]
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输出更有效率,对比如下代码:
#方式一:跳出解析模式
the type is 1
the type is not 1
#方式二:使用echo或者print输出
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 [email protected]:~
将当前文件夹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