容易犯错的 PHP 函数
strtotime
date( "Y-m", strtotime( "+1 month",strtotime("2018-01-31")));
你预期的结果是:2018-02,而实际得出的是:2018-03
原因在于二月是没有三十一号,多余的天数会加到三月份。解决方法有两种
第一种:
date( "Y-m", strtotime( "first day of +1 month",strtotime("2018-01-31")));
第二种:
date( "Y-m", strtotime( "+1 month",strtotime("2018-01-01")));
strpos
if(strpos("to be better","better") === TRUE) // 错误,应使用 !== FALSE
if(strpos("to be better","better") === FALSE)
查看官方文档的解释:
此函数可能返回布尔值 FALSE,但也可能返回等同于 FALSE 的非布尔值。请阅读 布尔类型章节以获取更多信息。> 应使用 === 运算符来测试此函数的返回值。
可以看出 === TRUE 这种判断是错的,应使用 !== FALSE 来判断为真
判断各种空值
使用if判断时, PHP对待:NULL、false、0、 空字符是一样的。
以下为各判断函数对照表:
array_merge()和+
array_merge():
如果输入的数组中有相同的字符串键名,则该键名后面的值将覆盖前一个值。(你的1567)如果数组包含数字键名(可以试试看,之前折腾死我了),后面的值将不会覆盖原来的值,而是附加到后面。(数字键名会被重新分配,总会变成从零开始的。。)
*对于使用“+”合并数组:
如果数组中有相同的字符串键名(不管是不是数字),则会把最先出现的值作为最终结果返回,而把后面的数组拥有相同键名的那些值“抛弃”掉。(你的1237)
null合并运算符
在??中,$_GET['user'] 便已经使用了isset
由于日常使用中存在大量同时使用三元表达式和 isset()的情况, 我们添加了null合并运算符 (??) 这个语法糖。如果变量存在且值不为NULL
, 它就会返回自身的值,否则返回它的第二个操作数。
<?php
// Fetches the value of $_GET['user'] and returns 'nobody'
// if it does not exist.
$username = $_GET['user'] ?? 'nobody';
// This is equivalent to:
$username = isset($_GET['user']) ? $_GET['user'] : 'nobody';
// Coalesces can be chained: this will return the first
// defined value out of $_GET['user'], $_POST['user'], and
// 'nobody'.
$username = $_GET['user'] ?? $_POST['user'] ?? 'nobody';
?>
使用curl的时候,设置参数应为键值而不是字符串
// 错误的
$config['CURLOPT_URL'] = "https://weburl/index.action";
$config['CURLOPT_VERBOSE'] = 0;
$config['CURLOPT_SSLVERSION'] = 3;
$config['CURLOPT_SSL_VERIFYPEER'] = FALSE;
$config['CURLOPT_SSL_VERIFYHOST'] = 2;
$config['CURLOPT_FOLLOWLOCATION'] = 0;
// 正确的
$config[CURLOPT_URL] = "https://weburl/index.action";
$config[CURLOPT_VERBOSE] = 0;
$config[CURLOPT_SSLVERSION] = 3;
$config[CURLOPT_SSL_VERIFYPEER] = FALSE;
$config[CURLOPT_SSL_VERIFYHOST] = 2;
$config[CURLOPT_FOLLOWLOCATION] = 0;
urlencode与urldecode
urlencode()函数原理就是首先把中文字符转换为十六进制,然后在每个字符前面加一个标识符%,对字符串中除了 -_. 之外的所有非字母数字字符都将被替换成百分号(%)后跟两位十六进制数,空格则编码为加号(+)。
urldecode()函数与urlencode()函数原理相反,用于解码已编码的 URL 字符串,其原理就是把十六进制字符串转换为中文字符。
本作品采用《CC 协议》,转载必须注明作者和本文链接
推荐文章: