1.trim
,ltrim
,rtrim
三个函数类似,下面以ltrim
举例,其实这个问题项目中经常出错
ltrim('abacdef', 'cab') // def
很多人以为结果会是 abacdef
,实际却是def
,把第二个参数理解为一个字符序列,或者是一个数组['c', 'a', 'b']
,可以这么理解ltrim
每次取出一个字符串,然后跟第二个参数的字符序列进行比较,看看每次取出来的字符串是否包含在字符序列['c', 'a', 'b']
中
如下:
a
在cab
里,所以trim
掉,结果为bacdef
b
在cab
里,所以trim
掉, 结果为acdef
a
在cab
里,所以trim
掉, 结果为cdef
c
在cab
里,所以trim
掉, 结果为def
d
不在cab
里,匹配停止,结果返回def
2.empty()
, isset()
, ??运算符
有很多初学PHP的朋友搞不清这俩函数用法,那么尝试比较一下下面的代码
$false = false;
$null = null;
$num = 0;
$array = [];
$string = ‘’;
empty($false); // true
empty($null); // true
empty($num); // true
empty($array); // true
empty($string); // true
isset($false) // true
isset($null) // false
isset($num) // true
isset($array) // true
isset($string) // true
很多初学者容易犯的错误,举栗子,传递type的时候按照type类型来查,不传递的时候会出退出程序,那么下面这个程序
$type = $_GET['type'];
$userType = empty($type) ? exit('没有传递参数') : $type;
当我请求的时候,type=0
,程序会直接exit('没有传递参数')
要想写一个严谨的判断空值的方法,参考下Laravel 中的blank方法
,下面贴出代码
if (! function_exists('blank')) {
/**
* Determine if the given value is "blank".
*
* @param mixed $value
* @return bool
*/
function blank($value)
{
if (is_null($value)) {
return true;
}
if (is_string($value)) {
return trim($value) === '';
}
if (is_numeric($value) || is_bool($value)) {
return false;
}
if ($value instanceof Countable) {
return count($value) === 0;
}
return empty($value);
}
}
当然一定要介绍一些 ??
运算符,记住了
$flag = null;
$params = $flag ?? "true";
print_r($params) ; // true
$flag = false;
$params = $flag ?? "true";
print_r($params); // false
$flag = '';
$params = $flag ?? "true";
print_r($params); // ''
$flag = 0;
$params = $flag ?? "true";
print_r($params); // 0
$flag = [];
$params = $flag ?? "true";
print_r($params); // array()
只有$flag = null
的时候,才会跑后面的表达式,不要用它来做0
以及空字符串的判断了
foreach
请走传送门吧,写的比较详细了