入门 - 判断是否为空

  • 作者:KK

  • 发表日期:2017.1.13


经常要判断一些数据是否为空、是否为false、是否为0等,PHP提供了一个empty函数来判断

其实接触别人的源码时也会经常看到人家用empty函数来做相关的判断的,可我在这里想说的是,其实不用empty函数也能做判断,代码书写更精炼,且看下面的对比例子:

function dump($str){
	echo $str . '<br/>';
}

$int = 0;
$bool = false;
$str = '';
$arr = [];

if(empty($int)){
	//条件符合
	dump('0 empty');
}

	if(!$int){
		//效果一样,也符合
		dump('!0');
	}

if(empty($bool)){
	//条件符合
	dump('false empty');
}

	if(!$bool){
		//效果一样,也符合
		dump('!false');
	}

if(empty($str)){
	//条件符合
	dump('false empty');
}

	if(!$str){
		//效果一样,也符合
		dump('!false');
	}

if(empty($arr)){
	//条件符合
	dump('[] empty');
}

	if(!$arr){
		//效果一样,也符合
		dump('![]');
	}

我是主张惜字如金的开发者,所以其实我基本上判断为空都是用!号来判断的,觉得写empty函数判断有点不必要了


你可能会问

  1. !号运算符在if判断里应该跟true/false判断更加紧密一点,如果跟非boolean类型的值做判断,虽然目前是可以条件成立,但会不会留下什么坑点导致未来判断不灵验?

    答:我相信不会,从PHP5.2到PHP7我一直都坚持使用!号判断,从未失灵过


  2. 官方未来升级会不会不兼容!号判断,我认为不会,因为我看到一些著名的开源项目都是通常用!号来运算空条件的,说明这些项目的开发者都和我的想法差不多,觉得!号就够了,大家都想写更精炼的代码,不啰嗦

    答:则既然有这么多项目都这么写了,如果PHP升级时要改变这种判断的底层逻辑,对这么多项目造成影响并不是好事,其实继续支持!号快速运算又不会有什么问题,作为一个非严谨的语言,提供这些不就是为了让大家用得爽,写得快吗?