PHP中的陷阱【函数】

1.trimltrimrtrim

三个函数类似,下面以ltrim举例,其实这个问题项目中经常出错

ltrim('abacdef', 'cab')  // def

很多人以为结果会是 abacdef,实际却是def,把第二个参数理解为一个字符序列,或者是一个数组['c', 'a', 'b'],可以这么理解ltrim每次取出一个字符串,然后跟第二个参数的字符序列进行比较,看看每次取出来的字符串是否包含在字符序列['c', 'a', 'b']
如下:

  1. acab里,所以trim掉,结果为bacdef
  2. bcab里,所以trim掉, 结果为 acdef
  3. acab里,所以trim掉, 结果为 cdef
  4. ccab里,所以trim掉, 结果为 def
  5. 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

请走传送门吧,写的比较详细了

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值